From 92bdf122d4198db842f29e2f370a2a8ae06ed8c6 Mon Sep 17 00:00:00 2001 From: Andrew Hicks Date: Thu, 16 Feb 2023 13:36:32 -0600 Subject: [PATCH] Moved files to module q3d, fixed broken imports --- extractor.py => legacy_scripts/extractor.py | 0 nondim.py => legacy_scripts/nondim.py | 37 +++- order_data.py => legacy_scripts/order_data.py | 0 main.py | 175 ------------------ compute.py => q3d/compute.py | 4 +- compute_terms.py => q3d/compute_terms.py | 2 +- config.py => q3d/config.py | 2 +- eigen.py => q3d/eigen.py | 0 .../firedrakeplus}/__init__.py | 0 {firedrakeplus => q3d/firedrakeplus}/check.py | 2 +- .../firedrakeplus}/computation.py | 8 +- .../firedrakeplus}/eqnglobals.py | 2 +- {firedrakeplus => q3d/firedrakeplus}/fy.py | 2 +- {firedrakeplus => q3d/firedrakeplus}/math.py | 0 {firedrakeplus => q3d/firedrakeplus}/mesh.py | 0 .../firedrakeplus}/solver.py | 44 ++--- {firedrakeplus => q3d/firedrakeplus}/vis.py | 8 +- loaddump.py => q3d/loaddump.py | 0 misc.py => q3d/misc.py | 8 +- plot.py => q3d/plot.py | 6 +- printoff.py => q3d/printoff.py | 6 +- saves.py => q3d/saves.py | 0 uflcache.py => q3d/uflcache.py | 6 +- userexpr.py => q3d/userexpr.py | 8 +- mesh.py => qmesh | 2 + qsave | 40 +--- qtensor3d | 20 +- 27 files changed, 104 insertions(+), 278 deletions(-) rename extractor.py => legacy_scripts/extractor.py (100%) rename nondim.py => legacy_scripts/nondim.py (65%) rename order_data.py => legacy_scripts/order_data.py (100%) delete mode 100644 main.py rename compute.py => q3d/compute.py (98%) rename compute_terms.py => q3d/compute_terms.py (98%) rename config.py => q3d/config.py (98%) rename eigen.py => q3d/eigen.py (100%) rename {firedrakeplus => q3d/firedrakeplus}/__init__.py (100%) rename {firedrakeplus => q3d/firedrakeplus}/check.py (95%) rename {firedrakeplus => q3d/firedrakeplus}/computation.py (97%) rename {firedrakeplus => q3d/firedrakeplus}/eqnglobals.py (97%) rename {firedrakeplus => q3d/firedrakeplus}/fy.py (95%) rename {firedrakeplus => q3d/firedrakeplus}/math.py (100%) rename {firedrakeplus => q3d/firedrakeplus}/mesh.py (100%) rename {firedrakeplus => q3d/firedrakeplus}/solver.py (93%) rename {firedrakeplus => q3d/firedrakeplus}/vis.py (93%) rename loaddump.py => q3d/loaddump.py (100%) rename misc.py => q3d/misc.py (96%) rename plot.py => q3d/plot.py (97%) rename printoff.py => q3d/printoff.py (98%) rename saves.py => q3d/saves.py (100%) rename uflcache.py => q3d/uflcache.py (97%) rename userexpr.py => q3d/userexpr.py (95%) rename mesh.py => qmesh (98%) diff --git a/extractor.py b/legacy_scripts/extractor.py similarity index 100% rename from extractor.py rename to legacy_scripts/extractor.py diff --git a/nondim.py b/legacy_scripts/nondim.py similarity index 65% rename from nondim.py rename to legacy_scripts/nondim.py index 1fc7f34..d568489 100644 --- a/nondim.py +++ b/legacy_scripts/nondim.py @@ -5,7 +5,6 @@ import sys import getopt import yaml -from newsave import nondimensionalize usage_str = """ usage: python nondim.py [-s] .yml @@ -14,6 +13,42 @@ def usage(): print(usage_str) +def nondimensionalize(const,R): + """ For a constants dictionary const and a length R (for a sphere-like mesh, + the radius), returns the non-dimensionalized version of these constants """ + + from math import sqrt + + nd_const = {} + + # Define auxiliary constants + + AM = max(const['A'],const['B'],const['C']) + LM = max(const['L1'],const['L2'],const['L3']) + + # Define non-dimensionalized constants + + nd_const['L0'] = const['L0'] + nd_const['A'] = const['A']/AM + nd_const['B'] = const['B']/AM + nd_const['C'] = const['C']/AM + nd_const['L1'] = const['L1']/LM + nd_const['L2'] = const['L2']/LM + nd_const['L3'] = const['L3']/LM + nd_const['W0'] = const['W0']*R/(LM) + nd_const['W1'] = const['W1']*R/(LM) + nd_const['W2'] = const['W2']*R/(LM) + nd_const['q0'] = const['q0']*R + nd_const['ep'] = sqrt(LM/AM)/R + try: + nd_const['beta'] = const['beta'] + except: + nd_const['beta'] = 1 + + # Return the non-dimensionalized constants + + return nd_const + def main(): save_mode = False diff --git a/order_data.py b/legacy_scripts/order_data.py similarity index 100% rename from order_data.py rename to legacy_scripts/order_data.py diff --git a/main.py b/main.py deleted file mode 100644 index 506daf7..0000000 --- a/main.py +++ /dev/null @@ -1,175 +0,0 @@ -""" Welcome to the Q-TENSOR NUMERICAL SIMULATION IN 3D. This program uses -Firedrake to solve the PDE for the Landau-de Gennes model for liquid crystals. -""" - -import os -import sys -from loaddump import load_json -import uflcache -from firedrake import COMM_WORLD as comm -from firedrakeplus import Mesh, BuiltinMesh, ManuQ -from firedrakeplus import set_eqn_globals, solve_PDE, compute_energy, errorL2, errorH1 - -def print0(*args,**kwargs): - if comm.rank == 0: - print(*args,**kwargs) - -help_text = """usage: python main.py [resume/overwrite ] - [conv-check]""" -def usage(): - print0(help_text) - -if len(sys.argv[1:]) == 0: - print0("Starting default") - settings_path = 'defaults/settings.yml' - constants_path = 'defaults/constants.yml' - SaveMode = None - SaveName = None -elif len(sys.argv[1:]) == 1: - if sys.argv[1] == 'help': - usage() - sys.exit() - if sys.argv[1] not in ('conv-check'): - print0(f"Argument '{sys.argv[1]}' not accepted.") - usage() - sys.exit() - - settings_path = 'settings/conv-check.yml' - constants_path = 'constants/conv-check.yml' - SaveMode = None - SaveName = None -elif len(sys.argv[1:]) == 2: - if sys.argv[1] not in ('resume','overwrite','OVERWRITE'): - print0(f"Argument '{sys.argv[1]}' not accepted.") - usage() - sys.exit() - - if not os.path.exists(f'saves/{sys.argv[2]}'): - print0(f"Specified save '{sys.argv[2]}' does not exist.") - sys.exit() - - SaveName = sys.argv[2] - - if sys.argv[1] == 'overwrite': - while True: - answer = input(f"Will overwrite save '{SaveName}'. Are you sure you want to continue? (y/n) ") if comm.rank == 0 else None - answer = comm.bcast(answer,root=0) - if answer in ('y','Y'): - SaveMode = 'overwrite' - break - if answer in ('n','N'): - print0("Exiting") - sys.exit() - if sys.argv[1] == 'OVERWRITE': - SaveMode = 'overwrite' - if sys.argv[1] == 'resume': - if not os.path.exists(f'saves/{SaveName}/chk/checkpoint.h5') and (not os.path.exists(f'saves/{SaveName}/chk/q_soln.h5') or not os.path.exists(f'saves/{SaveName}/chk/q_prev.h5')): - print0("Cannot resume since no checkpoint found. Try overwriting instead.") - sys.exit() - SaveMode = 'resume' - - settings_path = f'saves/{SaveName}/settings.yml' - constants_path = f'saves/{SaveName}/constants.yml' -else: - print0("Wrong number of arguments.") - usage() - sys.exit() - -# these three modules must be imported in order and before other modules, or else they won't work properly -import config -config.initialize(settings_path,constants_path) -from config import settings -from time import sleep - -import saves -saves.initialize(SaveMode,SaveName) - -# import other modules -import printoff as pr -from misc import Timer, get_range, check - -# print info -pr.constants_info() -pr.settings_info() - -# perform a check that will ensure the elastic constants are physical -check.elastic_constants() - -sleep(1) -pr.stext(f'PRELIMINARY COMPUTATIONS:',color='uline') - -# perform sympyplus preliminary computations -timer = Timer() -timer.start() - -import compute -comp = compute.compute() - -timer.stop() - -# rebuild UFL cache if in overwrite mode -if SaveMode == 'o': - pr.text("Rebuilding UFL cache...",end=' ') - uflcache.build_uflcache(saves.SavePath) - pr.text("build successful.") - -# if, however, the UFL cache is missing, rebuild it regardless of the mode -try: - uflcache_dict = load_json(f'{saves.SavePath}/uflcache.json') -except FileNotFoundError: - pr.text("UFL cache not found. Rebuilding...",end=' ') - uflcache.build_uflcache(saves.SavePath) - pr.text("build successful.") - uflcache_dict = load_json(f'{saves.SavePath}/uflcache.json') - -pr.stext(f'Finished preliminary computations in {timer.str_time}.') -sleep(1) -pr.stext(f'PDE SOLVE:',color='uline') - -# allow for multiple refinement levels for an in-depth comparison -for refinement_level in get_range(settings.mesh.refs): - # choose mesh, either builtin or one made in GMSH - if settings.mesh.builtin: - mesh = BuiltinMesh(settings.mesh.name,refinement_level) - else: - mesh = Mesh(f'meshes/{settings.mesh.name}/{settings.mesh.name}{refinement_level}.msh') - - # set equation globals to initialize - set_eqn_globals(comp,uflcache_dict) - - # solve PDE and get info about it - q_soln, time_elapsed, times, energies = solve_PDE(mesh,ref_lvl=refinement_level) - - # in case q_soln was loaded with a mesh from checkpoint, use this mesh instead of the other one - mesh = q_soln.function_space().mesh() - - # if a manufactured solution was specified in userexpr.yml, - # go ahead and compute its energy, and compare it to the - # solution we got from solve_PDE() - if 'manu_q' in uflcache.load_userexpr_yml(saves.SavePath).keys(): - q_manu = ManuQ(mesh) - manu_energy = compute_energy(q_manu) - h1_error = errorH1(q_soln,q_manu,mesh) - l2_error = errorL2(q_soln,q_manu,mesh) - - # print a verbose summary of the PDE solve info - try: - pr.pde_solve_info(refinement_level=refinement_level, - h1_error=h1_error, - l2_error=l2_error, - energy=energies[-1], - custom={'title':'Manu. Sol. Energy','text':manu_energy}, - time_elapsed=time_elapsed) - except IndexError: - pass - - sys.exit() - - # if a manufactured solution was not specified, then print - # an abbreviated summary of the PDE solve info - try: - pr.pde_solve_info(refinement_level=refinement_level,energy=energies[-1],time_elapsed=time_elapsed) - except IndexError: - pass - -# END OF CODE diff --git a/compute.py b/q3d/compute.py similarity index 98% rename from compute.py rename to q3d/compute.py index 3123fd1..a793412 100644 --- a/compute.py +++ b/q3d/compute.py @@ -1,7 +1,7 @@ from sympyplus import * -from config import constants as c -from config import settings +from q3d.config import constants as c +from q3d.config import settings # Set up Qvector objects diff --git a/compute_terms.py b/q3d/compute_terms.py similarity index 98% rename from compute_terms.py rename to q3d/compute_terms.py index 6d8b8d0..86d23d5 100644 --- a/compute_terms.py +++ b/q3d/compute_terms.py @@ -5,7 +5,7 @@ from sympyplus import * -from config import constants as c +from q3d.config import constants as c # Set up Qvector objects diff --git a/config.py b/q3d/config.py similarity index 98% rename from config.py rename to q3d/config.py index 89df0b3..10f706c 100644 --- a/config.py +++ b/q3d/config.py @@ -71,7 +71,7 @@ def nondimensionalize(c:FromDict,R:float): c.beta = 1 def initialize(settings_path,constants_path=None): - from loaddump import load_yml + from q3d.loaddump import load_yml # make settings global, thus importable global settings diff --git a/eigen.py b/q3d/eigen.py similarity index 100% rename from eigen.py rename to q3d/eigen.py diff --git a/firedrakeplus/__init__.py b/q3d/firedrakeplus/__init__.py similarity index 100% rename from firedrakeplus/__init__.py rename to q3d/firedrakeplus/__init__.py diff --git a/firedrakeplus/check.py b/q3d/firedrakeplus/check.py similarity index 95% rename from firedrakeplus/check.py rename to q3d/firedrakeplus/check.py index 6bc9bbf..2d4f00e 100644 --- a/firedrakeplus/check.py +++ b/q3d/firedrakeplus/check.py @@ -1,4 +1,4 @@ -import printoff as pr +import q3d.printoff as pr def check_energy_decrease(energies,current_time): """ Checks for energy decreasee in latest energy iteration. """ diff --git a/firedrakeplus/computation.py b/q3d/firedrakeplus/computation.py similarity index 97% rename from firedrakeplus/computation.py rename to q3d/firedrakeplus/computation.py index a8fe0f1..3fdac0b 100644 --- a/firedrakeplus/computation.py +++ b/q3d/firedrakeplus/computation.py @@ -3,7 +3,7 @@ from firedrake import interpolate, assemble from firedrake import dx, ds from ufl.operators import * -import printoff as pr +import q3d.printoff as pr class linesearch: def ls(name,*args,**kwargs): @@ -21,7 +21,7 @@ def ls(name,*args,**kwargs): def backtrack(q_prev,time_der,alpha): """ Given the previous guess, the time derivative, and the time step alpha, returns xi computed by backtracking. """ - from firedrakeplus.eqnglobals import EqnGlobals + from q3d.firedrakeplus.eqnglobals import EqnGlobals H1_vec = q_prev.function_space() @@ -96,8 +96,8 @@ def none(q_prev,time_der,alpha): return alpha def compute_energy(*functions, der=0, min_moment=None): - from firedrakeplus.eqnglobals import EqnGlobals - from config import settings + from q3d.firedrakeplus.eqnglobals import EqnGlobals + from q3d.config import settings # Check for correct values diff --git a/firedrakeplus/eqnglobals.py b/q3d/firedrakeplus/eqnglobals.py similarity index 97% rename from firedrakeplus/eqnglobals.py rename to q3d/firedrakeplus/eqnglobals.py index 72cbe0b..3030fa8 100644 --- a/firedrakeplus/eqnglobals.py +++ b/q3d/firedrakeplus/eqnglobals.py @@ -1,5 +1,5 @@ def set_eqn_globals(comp,uflcache_dict): - from config import settings + from q3d.config import settings global EqnGlobals class EqnGlobals: diff --git a/firedrakeplus/fy.py b/q3d/firedrakeplus/fy.py similarity index 95% rename from firedrakeplus/fy.py rename to q3d/firedrakeplus/fy.py index 3dcc1ea..29084ad 100644 --- a/firedrakeplus/fy.py +++ b/q3d/firedrakeplus/fy.py @@ -37,5 +37,5 @@ def RandomFunction(function_space): return function def ManuQ(mesh): - from firedrakeplus.eqnglobals import EqnGlobals + from q3d.firedrakeplus.eqnglobals import EqnGlobals return firedrakefy(EqnGlobals.manu_q,mesh) \ No newline at end of file diff --git a/firedrakeplus/math.py b/q3d/firedrakeplus/math.py similarity index 100% rename from firedrakeplus/math.py rename to q3d/firedrakeplus/math.py diff --git a/firedrakeplus/mesh.py b/q3d/firedrakeplus/mesh.py similarity index 100% rename from firedrakeplus/mesh.py rename to q3d/firedrakeplus/mesh.py diff --git a/firedrakeplus/solver.py b/q3d/firedrakeplus/solver.py similarity index 93% rename from firedrakeplus/solver.py rename to q3d/firedrakeplus/solver.py index 4776574..6601859 100644 --- a/firedrakeplus/solver.py +++ b/q3d/firedrakeplus/solver.py @@ -3,22 +3,22 @@ from firedrake import VectorFunctionSpace, FacetNormal, TrialFunction, TestFunction from firedrake import solve, interpolate from firedrake import dx, ds -from firedrakeplus.math import nrm -from firedrakeplus.check import check_energy_decrease -from firedrakeplus.computation import compute_energy, compute_res_val, compute_slope_val, determine_measure, linesearch -from firedrakeplus.vis import visualize +from q3d.firedrakeplus.math import nrm +from q3d.firedrakeplus.check import check_energy_decrease +from q3d.firedrakeplus.computation import compute_energy, compute_res_val, compute_slope_val, determine_measure, linesearch +from q3d.firedrakeplus.vis import visualize from datetime import datetime -from misc import Timer -import printoff as pr -import plot -import saves +from q3d.misc import Timer +import q3d.printoff as pr +import q3d.plot as plot +import q3d.saves as saves from ufl import H1 from ufl.operators import * def solve_PDE(msh,ref_lvl='Not specified'): - from firedrakeplus.eqnglobals import EqnGlobals - from config import settings + from q3d.firedrakeplus.eqnglobals import EqnGlobals + from q3d.config import settings # globalize stuff that needs to be accessed inside other functions, delete later global mesh, refinement_level, H1_vec, x0, x1, x2, nu, q, p, q_prev, q_prev_prev, q_newt_prev, f, g, times, energies @@ -97,7 +97,7 @@ def solve_PDE(msh,ref_lvl='Not specified'): return (q_soln, timer.str_time, times, energies) def _define_a_L(pde_d : dict, pde_b : dict): - from config import settings + from q3d.config import settings pde_d = {key:eval(xhs) for key,xhs in pde_d.items()} # establishes lhs and rhs with corresponding keys pde_b = {key:eval(xhs) for key,xhs in pde_b.items()} @@ -124,7 +124,7 @@ def _define_a_L_eqn(pde_d: dict, pde_b: dict): return a == L def _define_bcs(bdy_cond : str): - from config import settings + from q3d.config import settings strong_boundary = settings.options.strong_boundary @@ -142,7 +142,7 @@ def _define_bcs(bdy_cond : str): return bcs def _g_solve(*args,**kwargs): - from config import settings + from q3d.config import settings if settings.pde.grad_desc: _graddesc_solve(*args,**kwargs) @@ -150,7 +150,7 @@ def _g_solve(*args,**kwargs): _non_graddesc_solve(*args,**kwargs) def _graddesc_solve(times_list, q_soln, bcs, solver_parameters, newton_parameters): - from config import settings + from q3d.config import settings # create counter object counter = _CheckpointCounter() @@ -206,8 +206,8 @@ def _non_graddesc_solve(times_list, q_soln, bcs, solver_parameters, newton_param _checkpoint(q_soln,current_time) def _n_solve(*args,**kwargs): - from config import settings - from firedrakeplus.eqnglobals import EqnGlobals + from q3d.config import settings + from q3d.firedrakeplus.eqnglobals import EqnGlobals # fetch q_soln q_soln = args[0] @@ -231,7 +231,7 @@ def _n_solve(*args,**kwargs): raise ValueError def _newton_solve(q_soln,bcs=None,solver_parameters={},newton_parameters={}): - from firedrakeplus.eqnglobals import EqnGlobals + from q3d.firedrakeplus.eqnglobals import EqnGlobals # obtain current gradient descent time step number ii = len(energies) @@ -274,8 +274,8 @@ def _newton_solve(q_soln,bcs=None,solver_parameters={},newton_parameters={}): q_soln.assign(q_newt_soln) def _dynamic_solve(q_soln,bcs=None,solver_parameters={},newton_parameters={}): - from firedrakeplus.eqnglobals import EqnGlobals - from config import settings + from q3d.firedrakeplus.eqnglobals import EqnGlobals + from q3d.config import settings from firedrake import assemble # obtain current gradient descent time step number @@ -369,7 +369,7 @@ def _dynamic_solve(q_soln,bcs=None,solver_parameters={},newton_parameters={}): pr.iter_info_verbose('current solution updated', i=ii) def _builtin_nonlinear_solve(q_soln,bcs=None,solver_parameters={},newton_parameters={}): - from firedrakeplus.eqnglobals import EqnGlobals + from q3d.firedrakeplus.eqnglobals import EqnGlobals function_space = q_soln.function_space() @@ -409,8 +409,8 @@ def _checkpoint(q_soln,current_time): class _CheckpointCounter: def __init__(self): - from saves import SaveMode - from config import settings + from q3d.saves import SaveMode + from q3d.config import settings self.__save_mode = SaveMode self.__save_every = settings.time.save_every self.__counter = 0 diff --git a/firedrakeplus/vis.py b/q3d/firedrakeplus/vis.py similarity index 93% rename from firedrakeplus/vis.py rename to q3d/firedrakeplus/vis.py index 0d8041a..e371cb5 100644 --- a/firedrakeplus/vis.py +++ b/q3d/firedrakeplus/vis.py @@ -1,12 +1,12 @@ from firedrake import FunctionSpace, SpatialCoordinate, Function, op2 from firedrake import TensorFunctionSpace, VectorFunctionSpace from firedrake import interpolate, as_vector, sqrt, dot -from firedrakeplus.fy import tensorfy -import eigen -import saves +from q3d.firedrakeplus.fy import tensorfy +import q3d.eigen as eigen +import q3d.saves as saves def visualize(q_vis,mesh,time=None,new_outfile=False): - from config import settings + from q3d.config import settings # Create functions to store eigenvectors and eigenvalues diff --git a/loaddump.py b/q3d/loaddump.py similarity index 100% rename from loaddump.py rename to q3d/loaddump.py diff --git a/misc.py b/q3d/misc.py similarity index 96% rename from misc.py rename to q3d/misc.py index c7f8c84..c4e51fe 100644 --- a/misc.py +++ b/q3d/misc.py @@ -4,12 +4,12 @@ class check: def elastic_constants(): - import printoff as pr - from config import constants as c + import q3d.printoff as pr + from q3d.config import constants as c if 0>=c.L1 or -c.L1>=c.L3 or c.L3>=2*c.L1 or -3/5*c.L1-1/10*c.L3>=c.L2: pr.warning('L1, L2, and L3 do not satisfy the proper inequalities') def energy_decrease(times,energies): - import printoff as pr + import q3d.printoff as pr for i in range(len(energies)-1): change_in_energy = energies[i+1]-energies[i] if change_in_energy > 0: @@ -130,7 +130,7 @@ def str_time(self): # Decorators def time_this(func): - import printoff as pr + import q3d.printoff as pr @functools.wraps(func) def wrapper(*args, **kwargs): timer = Timer() diff --git a/plot.py b/q3d/plot.py similarity index 97% rename from plot.py rename to q3d/plot.py index 1d8dcc7..6f014db 100644 --- a/plot.py +++ b/q3d/plot.py @@ -1,7 +1,7 @@ import matplotlib.pyplot as plt import numpy as np import os -import saves +import q3d.saves as saves def usage(): usage = """usage: python plot.py [-o] (-l | -r) @@ -11,7 +11,7 @@ def usage(): print(usage) def time_vs_energy(times,energies,refinement_level='Not specified',open_file=False): - from config import settings + from q3d.config import settings import matplotlib if not open_file: @@ -84,7 +84,7 @@ def scatter_vs_poly(scatter,poly): def main(): import getopt import sys - import config + import q3d.config as config try: opts, args = getopt.getopt(sys.argv[1:], 'l:r:o', ['help']) diff --git a/printoff.py b/q3d/printoff.py similarity index 98% rename from printoff.py rename to q3d/printoff.py index 32455ed..0110778 100644 --- a/printoff.py +++ b/q3d/printoff.py @@ -6,7 +6,7 @@ module, but this will take time to migrate. """ from multiprocessing.sharedctypes import Value -import saves +import q3d.saves as saves import functools from datetime import datetime @@ -146,7 +146,7 @@ def iter_info_verbose(*strings: str, i: int, j: int=None, b: str='()'): @plogger def constants_info(): - from config import constants as c + from q3d.config import constants as c plog() plog('CONSTANTS:',color='uline') plog() @@ -156,7 +156,7 @@ def constants_info(): @plogger def settings_info(): - from config import settings + from q3d.config import settings plog('SETTINGS:',color='uline') plog() diff --git a/saves.py b/q3d/saves.py similarity index 100% rename from saves.py rename to q3d/saves.py diff --git a/uflcache.py b/q3d/uflcache.py similarity index 97% rename from uflcache.py rename to q3d/uflcache.py index d2d3f5f..caa0b4b 100644 --- a/uflcache.py +++ b/q3d/uflcache.py @@ -1,8 +1,8 @@ """ Takes the setup data given and compiles the file uflcache.json, which controls the PDE to be solved. """ -from loaddump import * -from userexpr import * +from q3d.loaddump import * +from q3d.userexpr import * userexpr_types = ('initcond','w_bdy_nu','s_bdy','manu_q','forcing_f','forcing_g') @@ -62,7 +62,7 @@ def build_uflcache(path_head): def main(): import getopt import sys - import config + import q3d.config as config try: opts, args = getopt.getopt(sys.argv[1:], 'l:r:', ['help']) diff --git a/userexpr.py b/q3d/userexpr.py similarity index 95% rename from userexpr.py rename to q3d/userexpr.py index f9fb93d..7992bd5 100644 --- a/userexpr.py +++ b/q3d/userexpr.py @@ -2,7 +2,7 @@ from sympyplus import * import yaml -from loaddump import * +from q3d.loaddump import * constructors = ('SpatialVector','FromTensor','FromVector','FromDirector', 'FromTensorStrongF','FromVectorStrongF','FromDirectorStrongF', @@ -40,13 +40,13 @@ def representer(dumper,data): class FromSympyStrongF(FromSympy): @property def result(self): - from compute_terms import strong_F + from q3d.compute_terms import strong_F return vectorfy(strong_F(q_tensorfy(self.per_se_expr))) class FromSympyStrongG(FromSympy): @property def result(self): - from compute_terms import strong_G + from q3d.compute_terms import strong_G return vectorfy(strong_G(q_tensorfy(self.per_se_expr))) # Base class for 3d vector @@ -87,7 +87,7 @@ def __repr__(self): class FromDirector(FromSympy): @property def per_se_expr(self): - from config import constants as c + from q3d.config import constants as c n = Matrix(self) n = n/sqrt(n[0]**2+n[1]**2+n[2]**2) M = c.S0*(outerp(n,n) - 1/3*eye(3)) diff --git a/mesh.py b/qmesh similarity index 98% rename from mesh.py rename to qmesh index 04b645e..15108d5 100644 --- a/mesh.py +++ b/qmesh @@ -1,3 +1,5 @@ +#!/usr/bin/env python + import getopt import sys import mymesh diff --git a/qsave b/qsave index e4668a2..be424f0 100644 --- a/qsave +++ b/qsave @@ -4,8 +4,8 @@ import getopt import os import shutil import sys -from loaddump import * -from userexpr import * # needed to process userexpr.yml +from q3d.loaddump import * +from q3d.userexpr import * # needed to process userexpr.yml def usage(): usage_str = """usage: ./qsave (-c | -h ) @@ -17,42 +17,6 @@ def usage(): """ print(usage_str) -def nondimensionalize(const,R): - """ For a constants dictionary const and a length R (for a sphere-like mesh, - the radius), returns the non-dimensionalized version of these constants """ - - from math import sqrt - - nd_const = {} - - # Define auxiliary constants - - AM = max(const['A'],const['B'],const['C']) - LM = max(const['L1'],const['L2'],const['L3']) - - # Define non-dimensionalized constants - - nd_const['L0'] = const['L0'] - nd_const['A'] = const['A']/AM - nd_const['B'] = const['B']/AM - nd_const['C'] = const['C']/AM - nd_const['L1'] = const['L1']/LM - nd_const['L2'] = const['L2']/LM - nd_const['L3'] = const['L3']/LM - nd_const['W0'] = const['W0']*R/(LM) - nd_const['W1'] = const['W1']*R/(LM) - nd_const['W2'] = const['W2']*R/(LM) - nd_const['q0'] = const['q0']*R - nd_const['ep'] = sqrt(LM/AM)/R - try: - nd_const['beta'] = const['beta'] - except: - nd_const['beta'] = 1 - - # Return the non-dimensionalized constants - - return nd_const - # MAIN FUNCTIONS def build(save_path:str): diff --git a/qtensor3d b/qtensor3d index dee4c62..d1103e4 100644 --- a/qtensor3d +++ b/qtensor3d @@ -3,11 +3,11 @@ import getopt import os import sys -from loaddump import load_json -import uflcache +from q3d.loaddump import load_json +import q3d.uflcache as uflcache from firedrake import COMM_WORLD as comm -from firedrakeplus import Mesh, BuiltinMesh, ManuQ -from firedrakeplus import set_eqn_globals, solve_PDE, compute_energy, errorL2, errorH1 +from q3d.firedrakeplus import Mesh, BuiltinMesh, ManuQ +from q3d.firedrakeplus import set_eqn_globals, solve_PDE, compute_energy, errorL2, errorH1 def print0(*args,**kwargs): if comm.rank == 0: @@ -45,17 +45,17 @@ def run(path, mode='r'): comm.Barrier() # these three modules must be imported in order and before other modules, or else they won't work properly - import config + import q3d.config as config config.initialize(f'{path}/settings.yml',f'{path}/constants.yml') - from config import settings + from q3d.config import settings from time import sleep - import saves + import q3d.saves as saves saves.initialize(mode,path) # import other modules - import printoff as pr - from misc import Timer, get_range, check + import q3d.printoff as pr + from q3d.misc import Timer, get_range, check # print info pr.constants_info() @@ -71,7 +71,7 @@ def run(path, mode='r'): timer = Timer() timer.start() - import compute + import q3d.compute as compute comp = compute.compute() timer.stop()