Generate the simple single level mesh of a line in the full cube.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(tem_global_type), | intent(out) | :: | me |
Structure to load the mesh to |
||
type(flu_State) | :: | conf |
Directory containing the mesh informations |
|||
integer, | intent(in) | :: | thandle |
Handle for the table to read the description of the mesh from. |
||
integer, | intent(in) | :: | myPart |
Partition to use on the calling process (= MPI Rank in comm) |
||
integer, | intent(in) | :: | nParts |
Number of partitions, the mesh is partitioned into (= Number of MPI processes in comm). |
||
integer, | intent(in) | :: | comm |
MPI Communicator to use |
||
character(len=*), | intent(in) | :: | predefined |
subroutine gen_treelm_line_global( me, conf, thandle, myPart, nParts, comm, & & predefined ) ! -------------------------------------------------------------------- ! !> Structure to load the mesh to type(tem_global_type), intent(out) :: me !> Directory containing the mesh informations type(flu_State) :: conf !> Handle for the table to read the description !! of the mesh from. integer, intent(in) :: thandle !> Partition to use on the calling process (= MPI Rank in comm) integer, intent(in) :: myPart !> Number of partitions, the mesh is partitioned into (= Number of MPI !! processes in comm). integer, intent(in) :: nParts !> MPI Communicator to use integer, intent(in) :: comm character(len=*), intent(in) :: predefined ! -------------------------------------------------------------------- ! integer :: iError integer :: orig_err(3) integer :: level integer :: elementcount ! -------------------------------------------------------------------- ! write(logUnit(1),*) 'Creating HEADER for a line mesh' me%nParts = nParts me%myPart = myPart me%comm = comm ! Get the origin of the cube: call aot_get_val( L = conf, & & thandle = thandle, & & key = 'origin', & & val = me%origin, & & ErrCode = orig_err, & & default = [0.0_rk, 0.0_rk, 0.0_rk] ) ! Get the length of the cube: call aot_get_val( L = conf, & & thandle = thandle, & & val = me%BoundingCubeLength, & & ErrCode = iError, & & key = 'length', & & default = 1.0_rk ) ! Get the refinement level: call aot_get_val( L = conf, & & thandle = thandle, & & val = level, & & ErrCode = iError, & & key = 'refinementLevel', & & default = -1 ) ! Get the element count: call aot_get_val( L = conf, & & thandle = thandle, & & val = elementcount, & & ErrCode = iError, & & key = 'element_count', & & default = -1 ) me%label = 'Generic_Line' me%predefined = trim(predefined) if (predefined == 'line_bounded') then ! Need a padding of at least 1 element, to allow boundary definitions ! at both ends in Ateles. me%minlevel = max( ceiling(log(real(elementcount+1,kind=rk)) & & / log(2.0_rk)), 1 ) me%BoundingCubeLength = (me%BoundingCubeLength * 2**me%minlevel) & & / elementcount else if (elementcount > 1) then me%minlevel = ceiling(log(real(elementcount,kind=rk))/log(2.0_rk)) else if (level > 0) then me%minlevel = level else if ((level == 0) .or. (elementcount == 1)) then me%BoundingCubeLength = me%BoundingCubeLength*2 me%minlevel = 1 me%label = 'Generic_Single' me%predefined = 'single' ! Reset elementcount, to avoid overwriting of the settings later on. elementcount = -1 else write(logunit(1),*) 'For a line you need to state either refinementLevel' write(logunit(1),*) 'or element_count. None of them found!' write(logunit(1),*) 'STOPPING' call tem_abort() end if if (elementcount > 1) then me%BoundingCubeLength = (me%BoundingCubeLength * 2**me%minlevel) & & / elementcount end if me%maxLevel = me%minLevel write(me%comment,'(a15,i7,a16,i2,a1)') & & 'Generated with ', nParts, ' parts on Level ', me%minlevel, '.' me%dirname = './' ! Only boundary property in this mesh. me%nProperties = 1 if (associated(me%Property)) deallocate(me%property) allocate(me%Property(me%nProperties)) end subroutine gen_treelm_line_global