Path: blob/devel/elmerice/Tests/Calving2D/PROG/bedrockfunction_flat.f90
3206 views
1RECURSIVE SUBROUTINE getBedrock( Model,Solver,Timestep,TransientSimulation )2USE DefUtils34IMPLICIT NONE5INTERFACE6FUNCTION initbedrock(Model, nodenumber, x) RESULT(elevation)7USE DefUtils8TYPE(Model_t) :: Model9INTEGER :: nodenumber10REAL (KIND=dp) :: x, elevation11END FUNCTION initbedrock12END INTERFACE1314!------------------------------------------------------------------------------15! External variables16!------------------------------------------------------------------------------17TYPE(Model_t) :: Model18TYPE(Solver_t), TARGET :: Solver19LOGICAL :: TransientSimulation20REAL(KIND=dp) :: Timestep21!------------------------------------------------------------------------------22! Local variables23!------------------------------------------------------------------------------24TYPE(ValueList_t), Pointer :: BC25TYPE(Variable_t), POINTER :: Var26TYPE(Element_t),POINTER :: Element27INTEGER, POINTER :: VarPerm(:)28INTEGER :: VarDOFs, i, k29REAL(KIND=dp) :: x30REAL(KIND=dp), POINTER :: VarValues(:)31LOGICAL :: GotIt3233CALL INFO("getBedrock","Computing bedrock distribution", Level=1)3435Var => Solver % Variable36IF (ASSOCIATED(Var)) THEN37VarPerm => Var % Perm38VarDOFs = Var % DOFs39VarValues => Var % Values40ELSE41CALL FATAL('getBedrock','No Variable associated')42END IF43k=044DO i = 1,Model % NumberOfNodes45IF (VarPerm(i) > 0) THEN46x = Solver % Mesh % Nodes % x(i)47VarValues(VarPerm(i)) = initbedrock(Model,i,x)48PRINT *, "bed:", x, VarValues(VarPerm(i))49END IF50END DO51END SUBROUTINE getBedrock5253FUNCTION initbedrock(Model, nodenumber, x) RESULT(elevation)54USE ElementDescription55USE DefUtils5657IMPLICIT NONE58TYPE(Model_t) :: Model59INTEGER :: nodenumber60REAL (KIND=dp) :: x, elevation,z0, slope61slope = 1.0_dp/40.062z0 = -550.0_dp63elevation = z0 - slope*x64END FUNCTION initbedrock6566FUNCTION initsurface(Model, nodenumber, x) RESULT(elevation)67USE ElementDescription68USE DefUtils6970IMPLICIT NONE71INTERFACE72FUNCTION initbedrock(Model, nodenumber, x) RESULT(elevation)73USE DefUtils74TYPE(Model_t) :: Model75INTEGER :: nodenumber76REAL (KIND=dp) :: x, elevation77END FUNCTION initbedrock78END INTERFACE7980TYPE(Model_t) :: Model81INTEGER :: nodenumber82REAL (KIND=dp) :: x, elevation8384elevation = initbedrock(Model, nodenumber, x) + 680.0_dp85END FUNCTION initsurface868788