Changes between Version 35 and Version 36 of ModulesOnAstroBear


Ignore:
Timestamp:
01/14/13 22:05:40 (12 years ago)
Author:
Jonathan
Comment:

Legend:

Unmodified
Added
Removed
Modified
  • ModulesOnAstroBear

    v35 v36  
    276276    END DO
    277277  END SUBROUTINE
    278 }}}
    279 
    280 
     278 ...
     279}}}
     280
     281There are a lot of other ways we could modify this simple example to have the clump be located anywhere, to have a density profile that is smoothed at the edge, to be a different temperature, or move with a particular velocity, etc...  Fortunately, clumps are a commonly used astrophysical object and there is a clump object module to assist users in easily creating clumps.  For example the above module could be rewritten as:
     282
     283{{{
     284MODULE Problem
     285  USE GlobalDeclarations
     286  USE DataDeclarations
     287  USE Clumps
     288  USE Ambients
     289  IMPLICIT NONE
     290  SAVE
     291  PUBLIC ProblemModuleInit, ProblemGridInit, &
     292       ProblemBeforeStep, ProblemAfterStep, ProblemSetErrFlag, ProblemBeforeGlobalStep
     293  PRIVATE REAL(KIND=qPREC) :: rho, radius
     294
     295CONTAINS
     296
     297  SUBROUTINE ProblemModuleInit()
     298    TYPE(AmbientDef), POINTER :: Ambient
     299    TYPE(ClumpDef), POINTER :: Clump
     300    NAMELIST/ProblemData/ rho, radius
     301    OPEN(UNIT=PROBLEM_DATA_HANDLE, FILE='problem.data', STATUS="OLD")
     302    READ(PROBLEM_DATA_HANDLE,NML=ProblemData)
     303    CLOSE(PROBLEM_DATA_HANDLE)
     304    CALL CreateAmbient(Ambient)
     305    CALL CreateClump(Clump)
     306    Clump%density=rho
     307    Clump%radius=radius
     308    CALL UpdateClump(Clump)
     309  END SUBROUTINE
     310 
     311  SUBROUTINE ProblemGridInit(Info)
     312    TYPE(InfoDef), POINTER :: Info
     313  END SUBROUTINE
     314 
     315 ...
     316}}}
     317
     318So what is going on here?  First we've added USE statements for the Clumps and Ambients modules.  Then in our ProblemModuleInit() routine we've declared an ambientdef and a clumpdef pointer.  Then in CreateAmbient() we create an ambient object with the default properties - density = 1, pressure = 1, velocity = 0, etc... which sets the entire grid to be uniform.  Then we create a clump object and modify its properties (density, and radius) before updated the clump object.  And we're done.
     319
     320
     321And if we want to get more complicated - we can modify other clump attributes. 
    281322
    282323