Changes between Version 1 and Version 2 of LineTransfer


Ignore:
Timestamp:
01/10/17 16:23:56 (8 years ago)
Author:
Jonathan
Comment:

Legend:

Unmodified
Added
Removed
Modified
  • LineTransfer

    v1 v2  
    1 So - data structures?
     1== Data structures ==
     2There are two primary data structures used by the linetransfer routines in AstroBEAR
    23
    3 Type ZoneLayout
    4 
    5 integer ::  ZoneLayout(3,2,nZones)
    6 integer :: ZoneMembers(nZones, MaxProcsPerZone)
    7 
    8 Type PatchBoundaryDataPerZonePerDirection(nMyZones, nRays)
    9   integer :: mGlobal !originating patch boundaries - used for sorting
    10   integer :: Rays(2,2) ! given indexing based on direction and level
    11   REAL :: Depth (:,:)
    12   LOGICAL :: Integrated ! stores whether each ray is an integrated value - or a local value
    13   REAL :: zvals(:,:) ! stores exit value for 'z' data.  used to determine which rays should be accumulated.
    14 end type
    15 
    16 Patch->Zones->RayBoundaries -> Communication to Upwind Zones
    17 
    18 Each processor orders Patch Boundaries within a zone and integrates the depth.  At this point every patch boundary should be integrated and is suitable for updating physical zones.  So now - loop over patches and find boundaries and update optical depth to all of the cells.
    19 
    20 SUBROUTINE Calculate_Patch_Boundary_Data_For_Local_Zones(Info, direction)
    21 ! Calculates optical depth from grid edge to each cell and creates a Patch_Boundary_Data_Per_Zone_Per_Direction object(s)
     41.  !PatchDef - This stores information about patches needed to do the ray tracing
     51.  !RayGroupDef - This stores information about a particular group of parallel rays
    226
    237
    24 END
     8The basic algorithm to calculate optical depths is as follows:
    259
    26 SUBROUTINE Integrate_Patch_Boundary_Data_For_Zone(zone, direction)
     10==  Get Local Depths ==
     11Integrate across each patch and store the local (patch) contribution to the optical depth at each cell center as well as the total optical depth across the patch.
    2712
    28 END
     13== Collect Patches ==
     14For each patch, build a list of shadow-patches and send/receive the optical depth across each shadow patch.
     15
     16== Add Shadows ==
     17For each patch, sort the shadow patches by their earliest 'z-value'
     18Then accumulate shadows for each patch
     19
     20
     21Currently the code just calculates the optical depth to each zone.
     22
     23The Krumholz et al scheme, calculates ionization rates as well as optical depths when it traverses the tree.
     24
     251.)  Modify tree traversal scheme to also calculate the ionization rate in addition to the optical depth
     262.)  Add routines to take ionization rate and calculate heating/cooling rates and calculate CFL
     273.)  Add routine to update energy and ionization values
     284.)  Add sub-cycling
     295.)  Will need to store ionization & heating/cooling rates in addition to optical depths at patch boundaries for AMR to work with sub-cycling so we can update ghost zones
     306.)  Implement healpix tree traversal scheme.
     31