This lightly commented program performs a unit test on the Assembled_Vector Class.
program Unit_Test use Caesar_Intrinsics_Module use Caesar_Base_Structure_Class use Caesar_Assembled_Vector_Class use Caesar_Communication_Class implicit none type(Communication_type) :: Comm type(Base_Structure_type) :: Cell_Structure type(Assembled_Vector_type) :: Coordinates_Cells_AV type(Status_type) :: status type(character,name_length) :: Locus_Name, Name_Name type(real,2) :: Coordinates, Processed_Coordinates type(integer,1) :: Cells_Length_Vector type(integer) :: c, CellSize, d, Dimensionality, DimSize, i, NCells, & NDimensions type(logical) :: Success ! Initializations. call Initialize (Comm) call Output (Comm) call Initialize (status) call Initialize (Locus_Name) call Initialize (Name_Name) call Initialize (Cells_Length_Vector, NPEs) Locus_Name = 'Cells' Name_Name = 'Coordinates of Cells' Cells_Length_Vector = (/ (i**2, i = 1, NPEs) /) Dimensionality = 2 NDimensions = 4 ! Set up Coordinates array on IO PE only. NCells = SUM(Cells_Length_Vector) if (this_is_IO_PE) then DimSize = NDimensions CellSize = NCells else DimSize = 0 CellSize = 0 end if call Initialize (Coordinates, DimSize, CellSize) call Initialize (Processed_Coordinates, DimSize, CellSize) if (this_is_IO_PE) then Coordinates = RESHAPE( & (/ (( changetype(real,(d + 10*c)), d = 1,NDimensions), c = 1,NCells) /), & (/ NDimensions, NCells /) ) end if ! Initialize base structure and assembled vector. call Initialize (Cell_Structure, Cells_Length_Vector, Locus_Name, status) call Initialize (Coordinates_Cells_AV, Cell_Structure, Dimensionality, & Name_Name, status, NDimensions) ! Version number check. Coordinates_Cells_AV = 123 Success = Version(Coordinates_Cells_AV) == 123 call Output_Test ('Version number', Success) ! Send Coordinates into Assembled Vector and back again. Coordinates_Cells_AV = Coordinates Processed_Coordinates = Coordinates_Cells_AV ! Check to see if the round trip had any effect. Success = ALL(Processed_Coordinates == Coordinates) call Output_Test ('Round trip', Success) ! Output a fraction of the AV. call Output (Coordinates_Cells_AV, MAX(1, NCells/10), MIN(NCells, NCells/10+50)) ! Check state of base structure and assembled vector. VERIFY(Valid_State(Coordinates_Cells_AV),0) VERIFY(Valid_State(Cell_Structure),0) ! Finalize assembled vector, base structure and communications. call Finalize (Coordinates_Cells_AV) call Finalize (Cell_Structure) call Finalize (Comm) end