allocate_fields Subroutine

public subroutine allocate_fields(mesh, fields)

Dynamically allocates all arrays within the flow fields container.

Sizing is determined by the number of cells and faces in the provided mesh. All fields are initialized to zero upon allocation.

Arguments

Type IntentOptional Attributes Name
type(mesh_t), intent(in) :: mesh

The mesh structure defining the domain size.

type(flow_fields_t), intent(inout) :: fields

The container to be allocated.


Source Code

   subroutine allocate_fields(mesh, fields)
      type(mesh_t), intent(in) :: mesh
      type(flow_fields_t), intent(inout) :: fields

      call finalize_fields(fields)

      allocate(fields%u(3, mesh%ncells))
      allocate(fields%u_old(3, mesh%ncells))
      allocate(fields%u_star(3, mesh%ncells))

      allocate(fields%p(mesh%ncells))
      allocate(fields%phi(mesh%ncells))
      allocate(fields%div(mesh%ncells))

      allocate(fields%face_flux(mesh%nfaces))
      allocate(fields%divergence_source(mesh%ncells))
      allocate(fields%projection_rho(mesh%ncells))
      allocate(fields%projection_divergence_source(mesh%ncells))
      allocate(fields%mass_flux(mesh%nfaces))
      allocate(fields%rhs_old(3, mesh%ncells))

      fields%u = zero
      fields%u_old = zero
      fields%u_star = zero

      fields%p = zero
      fields%phi = zero
      fields%div = zero

      fields%face_flux = zero
      fields%divergence_source = zero
      fields%projection_rho = zero
      fields%projection_divergence_source = zero
      fields%mass_flux = zero
      fields%rhs_old = zero
      fields%rhs_old_valid = .false.
   end subroutine allocate_fields