Beispiel #1
0
int write_solver(struct solver_data *solver, char *filename) {
  FILE *fp;
  
  if(filename == NULL || solver == NULL) {
    printf("error: passed null arguments to write_solver\n");
    return(1);
  }

  fp = fopen(filename, "w");

  if(fp == NULL) {
    printf("error: cannot open %s in write_solver\n",filename);
    return(1);
  }

	if(solver->pressure == vof_pressure_gmres) fprintf(fp,"gmres 1\n");
	else if(solver->pressure == vof_pressure_gmres_mpi) fprintf(fp,"gmres_mpi 1\n");
	else if(solver->pressure == vof_pressure) fprintf(fp,"sor 1\n");

  fprintf(fp,"gravity %e %e %e\n",solver->gx, solver->gy, solver->gz);
  fprintf(fp,"nu %e\n",solver->nu);
  fprintf(fp,"rho %e\n",solver->rho);
  fprintf(fp,"t %e\n",solver->t);
  fprintf(fp,"delt %e\n",solver->delt);
  fprintf(fp,"writet %e\n",solver->writet);
  fprintf(fp,"endt %e\n",solver->endt);
  if(solver->deltcal == NULL) fprintf(fp,"autot 0\n");
  
  if(kE_check(solver)) fprintf(fp,"turbulence 1\n");
  else fprintf(fp,"turbulence 0\n");

  fclose(fp);

  return 0;
}
Beispiel #2
0
int write_initial(struct solver_data *solver, char *filename) {
  FILE *fp;
  double velocity[3], inside[3];
  double value;
  
  if(filename == NULL || solver == NULL) {
    printf("error: passed null arguments to write_initial\n");
    return(1);
  }

  fp = fopen(filename, "w");

  if(fp == NULL) {
    printf("error: cannot open %s in write_initial\n",filename);
    return(1);
  }

  solver_get_initial_vector(solver, "velocity", velocity);
  fprintf(fp,"velocity %e %e %e\n",velocity[0],velocity[1],velocity[2]);
  
  value = solver_get_initial_scalar(solver, "vof_height");  
  if(value>0) fprintf(fp,"vof_height %e\n",value);
  
  value = solver_get_initial_scalar(solver, "hydrostatic");    
  if(value > 0) fprintf(fp,"hydrostatic 1\n");

  while(solver_get_initial_vector(solver, "inside", inside) != 1); // make sure we start at the first instance
  while(solver_get_initial_vector(solver, "inside", inside) != 1) {
    fprintf(fp,"inside %e %e %e\n",inside[0],inside[1],inside[2]);
  }
  
  value = solver_get_initial_scalar(solver, "kE_k");     
  if(value > 0 && kE_check(solver)) fprintf(fp,"kE_k %e\n",value);

  fclose(fp);

  return 0;
}
Beispiel #3
0
int solver_set_initial(struct solver_data *solver, char *param, int dims, 
                   double *vector) {
  long int z_height;

  if(solver == NULL || param == NULL || vector == NULL) {
    printf("error: null values passed to solver_set_initial\n");
    return(1);
  }

  if(strcmp(param, "inside")==0) {
    if(dims < 3) {
      printf("error in source file: inside requires 3 arguments\n");
      return(1);
    }  
  
    mesh_fill_vof(solver->mesh, vector);
  
  } else if(strcmp(param, "velocity")==0) {
    if(dims < 3) {
      printf("error in source file: velocity requires 3 arguments\n");
      return(1);
    }
 
    mesh_set_array(solver->mesh, "u", vector[0], -1, 0, 0, 0, 0, 0);   
    mesh_set_array(solver->mesh, "v", vector[1], -1, 0, 0, 0, 0, 0);
    mesh_set_array(solver->mesh, "w", vector[2], -1, 0, 0, 0, 0, 0);          
  
  } else if(strcmp(param, "u")==0) {
    if(dims != 1) {
      printf("error in source file: u requires 1 argument\n");
      return(1);
    }

    mesh_set_array(solver->mesh, "u", vector[0], -1, 0, 0, 0, 0, 0);
  } else if(strcmp(param, "v")==0) {
    if(dims != 1) {
      printf("error in source file: v requires 1 argument\n");
      return(1);
    }

    mesh_set_array(solver->mesh, "v", vector[0], -1, 0, 0, 0, 0, 0);  
  } else if(strcmp(param, "w")==0) {
    if(dims != 1) {
      printf("error in source file: w requires 1 argument\n");
      return(1);
    }

    mesh_set_array(solver->mesh, "w", vector[0], -1, 0, 0, 0, 0, 0);  
  } else if(strcmp(param, "vof_height")==0) {
    if(dims < 1) {
      printf("error in source file: vof_height requires 1 argument\n");
      return(1);
    }
    
    solver->vof_height = vector[0];
    solver->vof_delay = vector[1];
    
    if(fmod(solver->vof_height,solver->mesh->delz) < solver->emf) solver->vof_height -= solver->min_vof * 100;
    
    if(solver->vof_delay < solver->emf) {
    
      z_height = floor(solver->vof_height / solver->mesh->delz);

      mesh_set_array(solver->mesh, "vof", 1.0, 0, solver->mesh->imax, 
                                               0, solver->mesh->jmax, 
                                               0, z_height);  
                                               
      if(solver->vof_height / solver->mesh->delz - z_height > 0) {
        mesh_set_array(solver->mesh, "vof", solver->vof_height / solver->mesh->delz - z_height, 
                                               0, solver->mesh->imax, 
                                               0, solver->mesh->jmax, 
                                               z_height, z_height+1);        
      }
    
    }
                                             
  } else if(strcmp(param, "hydrostatic")==0) {
    if(dims < 1) {
      printf("error in source file: hydrostatic requires 1 argument\n");
      return(1);
    }
    
    if(vector[0]>0) mesh_set_hydrostatic(solver->mesh, fabs(solver->gz), solver->rho);  
    
  } else if(strcmp(param, "kE_k")==0) {
    if(dims < 1) {
      printf("error in source file: kE_k requires 1 argument\n");
      return(1);
    }
    if(!kE_check(solver)) {
      printf("error in source file: kE_k called but turbulence model is not k-Epsilon\n");
      return(1);
    }
    
    kE_set_internal(solver, vector[0], 0);
  }

  return 0;
}