Our friends at Forest City are killing it. They're furniture makers, designers, creators, and so much more. We've shared business ideas and tips and dreams over countless dinners and drinks. Creating a business is hard work, and it's been so comforting to swap ideas within the safety of friends.
It's an honor to call Forest City our friends. Check out their amazing work and watch them grow.


Anyone want to part with a stock CD player Add on for a '93 Accord? If you do I would gladly pay shipping plus a little extra.
Just bought a 2010 coupe/want to add new wheels/anyone done this with pics?
Quick Reply: Anyone have a STOCK CD add on for a '93 Accord?


text:
Pope Francis reveals romantic crush during seminary days
(RNS) Pope Francis was once "dazzled" by a young woman he met as a seminarian and even considered abandoning his vocation, he reveals in a newly uncovered interview.
Pope Francis waves from the pope-mobile during his inauguration Mass at St. Peter's Square on Tuesday (March 19) at the Vatican. RNS photo by Andrea Sabbadini
David Gibson
(RNS) Pope Francis was once "dazzled" by a young woman he met as a seminarian and even considered abandoning his vocation, adding that it would be "abnormal" for such things not to happen to priests. And he seemed to hold open the possibility that church law on priestly celibacy could be changed.
Pope Francis waves from the pope-mobile during his inauguration Mass at St. Peter's Square on Tuesday (March 19) at the Vatican. RNS photo by Andrea Sabbadini
During a conversation last year while he was still Cardinal Jorge Bergoglio, the new pope also advocated a zero-tolerance approach to clergy abusers, saying the way abusers were shuffled around to different parishes to protect the institutional church was "a stupid idea."
The book-length dialogue with a rabbi, which will be published in English in May, showed how Francis' personal experiences might inform his policies on hot-button topics like celibacy and sex abuse. The passage was translated by Aleteia, a website promoting Catholic evangelization.
"You cannot be in a position of power and destroy the life of another person," Bergoglio told Rabbi Abraham Skorka, rector of the Latin American Rabbinical Seminary. Their conversation was held in 2012 while Bergoglio was archbishop of Buenos Aires.
He told Skorka that when a bishop once asked him what he should do with priests suspected to molesting children: "I told him to take away the priests' licenses, not to allow them to exercise the priesthood any more, and to begin a canonical trial in that diocese's court."
"I think that's the attitude to have. I do not believe in taking positions that uphold a certain corporative spirit in order to avoid damaging the image of the institution."
Bergoglio, who was elected Pope Francis last week, also advocated a "zero tolerance" policy but did not say whether accused abusers should be automatically reported to criminal authorities.
Bergoglio also reflected on his own romantic experiences, noting that when he was a seminarian he was "dazzled" by a woman he met at an uncle's wedding.
"I was surprised by her beauty, her intellectual brilliance…and, well, I was bowled over for quite a while. I kept thinking and thinking about her. When I returned to the seminary after the wedding, I could not pray for over a week because when I tried to do so, the girl appeared in my head. I had to rethink what I was doing."
He decided to continue the path to the priesthood, but said "it would be abnormal for this kind of thing not to happen."
The future pope said that if a seminarian – or a priest – falls in love or has a child with a woman, he counsels them to leave and support his family, to "go in peace to be a good Christian and not a bad priest."
Bergoglio also said that if a priest got a woman pregnant, he advises the man to leave the priesthood so he can take care of the mother and child, even if the couple do not marry. "For just as that child has the right to have a mother, he has a right to the face of a father," he said. He added that if it is a one-time affair with no children, then he tries to help the priest do penance and "get on track again."
Bergoglio also spoke highly of Eastern-rite Catholic churches with married priests.
Family photo courtesy Shutterstock (http://shutr.bz/YGKQM2)
Still, the future pope said, "For now, the discipline of celibacy stands firm." He added, however, that while he favors maintain celibacy for priests, "with all its pros and cons," celibacy is "a matter of discipline, not of faith. It can change."
The Rev. Thomas Reese, a Jesuit – like Pope Francis – and an analyst for the National Catholic Reporter, wrote that Bergoglio's conditional language on priestly celibacy is "remarkable."
Reese said phrases like "for the moment" and "for now" are "not the kind of qualifications one normally hears when bishops and cardinals discuss celibacy."
The conversation between Bergoglio and Skorka will be published by Image Books and will be titled "On Heaven and Earth." In it the two men discuss topics such as fundamentalism, atheism, the Holocaust, abortion and homosexuality.

redpajama_set_name: RedPajamaCommonCrawl


Mr Lock Magic is available 24 hours a day, we come to your location in Hebron CT for locksmith services and support. If you are locked-out, lost a key, or working with outdated door hardware and are in need of an upgrade, we can help you out. We service auto, commercial and residential properties.
We'll do our best to give you an accurate estimate of a job over the phone, the more information and photos you can provide will help in this process. If there's work involved that needs to go beyond the estimate, we will always disclose any additional pricing before moving forward.
One of Mr Lock Magic's specialties is upgrading old door and lock hardware. If you're looking to preserve a specific style that maintains the look of the door we have many options at our disposal. Our licensed and insured locksmith brings his knowledge and professionalism to the town of Hebron and its surrounding areas.
We also offer these great residential locksmith services: Key Extraction & Removal; Re-keying Locks; Deadbolt Installation; High-Security Locks & more! We are available for emergency services calls 24 hours a day, 7 days a week.
Did anyone in Hebron, CT lose a car key or transponder? Our licensed and insured locksmith pro will come to you 24/7 to get you back on the road as soon as possible. Cars, vans, trucks, RVs, 18-Wheelers, basically anything with a key cylinder is no match for the years of experience we bring to the table.
Mr Lock Magic can also make Keys Duplicated/Code Cut, High Security Keys, Laser Keys and fob programming.
Looking to upgrade your security for your commercial property? Mr Lock Magic specializes in Access Control, RFID, keypad & fingerprint lock systems and services the Hebron CT area 24 hours a day. We provide a full array of commercial solutions for your property, including: Mortise Cylinders; Storefronts Bolts & Latches; Business Lockouts; Re-keying Locks for Employee Shifts; Key Control; Re-Securing Doors; Lock Installation, Replacement, & Repair and more!
Are you locked-out of your home, business, or motor vehicle? Contact us 24/7!


Angry Zeljeznicar fans stormed the pitch following a 1-0 home defeat to Zvijezda 09 on Sunday.
Hertha Berlin ultras clashed with riot police at the Westfalenstadion during Saturday's Bundesliga match with Borussia Dortmund.
Slavia Prague fans clashed with stewards inside the Parken Stadium after the side's Europa League match against FC Copenhagen on Thursday night.
A Polish Cup match between Wisla Sandomierz and Korona Kielce was halted on Wednesday after a pitch invasion.
Santiago Wanderers fans fought amongst each other in the stands at the Estadio Elias Figueroa Brander during Sunday's match with Cobresal.


text:
Timber companies dissociate from sourcing wood from Romanian national parks and primeval forests
agent green, check, euronatur, IKEA, industry, JAF, Policy, primeval forest, romania, Schweighofer, timberWoodland
EuroNatur and Agent Green investigate traceability of wood ++ International timber companies call on Romanian government to clarify legal situation ++ Romanian old-growth forests are massively threatened by illegal logging
The initiative "Forest Policy Checker" by nature conservation organisations EuroNatur and Agent Green calls on the wood-processing industry in Romania to disclose the origin of wood sourced for their production processes. Some of the very last primeval forests of Europe are acutely threatened by illegal logging in Romania – which is also due to insufficient protection by the Romanian authorities. The replies to the "Forest Policy Checker" also provide consumers with information about the sustainability criteria and transparency of internationally active timber companies. The questions were submitted to eleven companies which source the bulk of Romanian wood. The findings of this survey: Four companies say to reject wood from protected old-growth forests. On the other hand, six companies did not even answer. IKEA is the only company to accept timber from virgin forests or national parks as long as it is FSC-certified. In addition, timber from areas declared as national parks by the Romanian government but which do not meet the criteria of the IUCN. Questioned on the traceability of sourced wood, e.g. by means of unannounced inspections or by publishing logging permits, the companies reacted very uncommunicative.
The following companies completed the questionnaire: Egger (Austria), Holzindustrie Schweighofer (Austria), IKEA (Sweden), JF Furnir (Austria, in Romania called Holver), Kronospan (Austria). By contrast, Expansion (Romania), Kastamonu (Turkey), Losan (Spain), Massiv (Romania), Succes (Romania) and Yildiriz Entegre (Turkey) did not reply.
"In times, when the Romanian state acts like the worst enemy of nature, we call on international companies to increase the transparency of their business in Romania. We hope that more companies will join our efforts to stop illegal logging", says Gabriel Paun of Romanian nature conservation NGO Agent Green.
In fact, right those companies that have recently been heavily criticised by nature conservation organisations for their non-transparent procedures, now implemented new processes to increase traceability, for example Holzindustrie Schweighofer. Other companies expressed concerns about the current situation in Romania's forests, too.
"We are convinced that it is our duty to fulfil our responsibility towards society and nature – this guides our acts always. Therefore we support the implementation of IUCN criteria for national parks in Romania and worldwide, because these criteria ensure the protection of our precious ecosystems", says Katharina Schabasser Corporate Social Responsibility Representative of the Austrian timber company JF Furnir (Holver in Romania).
"To see wood-processing companies go to greater lengths than the Romanian government to protect old-growth forests is very revealing", states Gabriel Schwaderer, CEO of EuroNatur. "The companies have the right to a clear legal situation. The government finally has to act and better protect primeval forests." A first step in this direction would be to promptly include primeval forest areas in the National Register of Primeval Forests.


The Opportunity Working in an innovative agency setting, you will be looking to build a career agency side as an Account Executive. Supporting Account Managers on delivery of creative design work you will be work on high profile accounts in a cross sector business. Key Responsibilities: Working with the account team to deliver high quality designs To help raise cost estimates for client approval and sourcing related costs To record and monitor the project finances to help ensure they do not go over budget. To help ensure the projects continually meet the client's brief. Candidate Profile With previous knowledge/experience of working in a design agency, you will have strong time management and organisational skills, be used to working to deadlines. Successful members of the team you join all have a proactive 'can do' attitude and this is essential if you wish to be successful working for my client. Company An innovative design agency based In return, our client is offering a competitive salary, an attractive bonus scheme, and the chance to become part of a diverse and exciting team. To find out further information, or to apply for this position, please submit your CV via this website today. Park Street People Ltd is an Equal Opportunities Employer. We do not discriminate on the grounds of age, race, gender, disability, creed or sexual orientation and comply with all relevant UK legislation. We are acting as an Employment Agency in relation to this role. Due to high volumes of applications for this particular opportunity, only successful candidates will be contacted.


text:
'Just To Be Safe': Revere Residents Wait In Line At COVID Test Site After Thanksgiving
By Paul Burton November 29, 2020 at 9:23 pm
Filed Under:Coronavirus, Paul Burton, Revere News
REVERE (CBS) — The Stop the Spread coronavirus testing site at Revere High School parking lot remained busy for most of the day Sunday. "Just to be safe," said John Kim of Revere as he waited for a test.
The Revere Board of Health is advising residents who gathered with people outside of their household on Thanksgiving to isolate, test, and monitor for symptoms in the 14 days following the holiday to reduce further spread of the virus.
Yasmin Landazerde came to the test site with her grandmother who is trying to fly back to El Salvador, but her trip keeps getting delayed. "It's been kind of stressful. My grandma has been trying to fly out and just with the whole holiday stuff going on, it's just finding places that are open and then long lines and everything. Some tests coming inconclusive, but it's part of the process," Landazerde said.
"It just crazy because it's really out there. I lost my grandpa to [COVID]," she added.
Robert McKenzie just flew in from out of town is abiding by the safety guidelines. "I went out of town. I don't think I didn't anything that would get me trouble but I didn't want to go back to work until I am [tested]," McKenzie said.
A lot of these residents had to wait in line for about an hour to be tested but did not complain.
"I live in the area and have not been tested in a while," Jacqueline MacKay of Revere said.
In a span of about four hours city and health officials administered around 600 COVID-19 tests to individuals.
Revere will continue testing throughout the week from 3 p.m. to 8 p.m.
Paul Burton
Paul Burton is a general assignment reporter for WBZ-TV News.More from Paul Burton


A Russian politician was arrested in parliament in the middle of a session on Wednesday in connection with several murders, an official and news reports said.
Rauf Arashukov, a 32-year-old senator representing the Karachayevo-Cherkessia region of Russia's Northern Caucasus, is a suspect in the 2010 murders of two people and of pressuring a witness to one of the killings, according to investigators.
He allegedly acted as part of an organised group that included his father Raul Arashukov, said a statement by the Russian Investigative Committee.
Raul Arashukov was arrested as well later in the day on charges of embezzlement.
Rauf Arashukov was on the senate floor when police officers entered and read out a warrant, according to senate speaker Valentina Matviyenko.
"He tried to get up and leave the session. I told him to sit down," she told state television. Parliamentary journalists did not witness the arrest as the cameras were turned off without explanation, said a correspondent for Rossiya 24 state TV.
Investigators named the murder victims as Aslan Zhukov, an activist with an organisation representing the Circassian ethnic minority, and Fral Shebzukhov, an advisor to the governor of Arashukov's Karachayevo-Cherkessia region. Both were shot dead in 2010, on separate occasions.
Raul Arashukov, in turn, is also being investigated for the murder of Boris Khapsirokov, a businessman from the Rostov region who was killed in the 1990s.
Russian media first reported the probe connecting the senator and his father to at least five different murders in September 2018. The politician's spokespeople said the allegations were groundless.
In the meantime, the Investigative Committee announced plans to detain four more people in connection with the embezzlement charges brought against Raul Arashukov.
One of the four people to be detained is Ruslan Arashukov, Rauf's cousin. Ruslan Arashukov did not immediately respond to a request for comment. All four detained are top managers at several gas companies in the North Caucasus.
Raul Arashukov, investigators claim, had them procure more gas than the region needed and sold what was left. According to the Investigative Committee, he embezzled 30 billion rubles (£348 million) worth of gas.


William Shenstone to Thomas Percy, March? 1762; Letters, ed. Williams (1939) 621.
I've also purchased Lord Kaims on Criticism: for which I hope some Entertainment on account of his Subjects — tho I scarce expect to find him, any ways, equal to my Friend [Edmund] Burke.


text:
Report: Pearl Harbor's golf ball-shaped radar is "$2.2-billion flop"
April 6, 2015 at 10:18 AM HST - Updated July 10 at 7:30 AM
HONOLULU (HawaiiNewsNow) - A Los Angeles Times investigation found that the huge golf-ball-like radar craft that spends a lot of time at Pearl Harbor has failed to perform its important mission: detecting missiles in a sneak attack against the United States.
The Sea-Based X-Band Radar, with its floating platform and huge round dome, are supposed to be able to spot incoming missiles and track them so U.S. rocket interceptors can destroy them.
"It's a unique asset. The only one of its kind in the world," said Lt. Col. Steve Braddom, the SBX project manager in an interview with Hawaii News Now in 2011, during a media tour of the craft.
But a Los Angeles Times investigation found the giant floating radar that cost taxpayers $2.2 billion has been a huge flop.
The Times said the radar's field of vision is so narrow that it cannot reliably track a sequence of incoming missiles.
The craft's sensitive instruments are prone to corrosion at sea and it needs millions of dollars in fuel to operate even for short periods of time, the newspaper reported.
"The military has a long history of these defense projects that don't always work out so well. And part of it is because they're not always making decisions purely on the merits of the technology," said UH Political Science Professor Colin Moore, a Hawaii News Now political analyst.
The main contractors on the project are Boeing and Raytheon companies, among the world's biggest defense contractors and major political donors.
The LA Times reported the project was downgraded to "limited test support status" in 2012, and the radar sat idle at Pearl Harbor for more than eight months in 2013.
"We've spent a great deal of money on a system that doesn't seem to work very well and there are alternative systems, land-based systems that would have been cheaper and it turns out would have worked much better," Moore said.
The project not only wasted money but left a hole in the country's missile defenses, the LA Times reported.
Missiles from North Korea could arrive in Hawaii within about a half hour from launch, making the islands vulnerable to an attack, experts said.
Reached for comment , a spokesman for the Missile Defense Agency told Hawaii News Now the SBX radar "has performed and continues to perform its mission as designed. We continue to improve and enhance its performance."
The sea-based radar craft was supposed to become fully operational in 2005, during the Bush administration, the LA Times reported. Instead it spends most of its time mothballed at Pearl Harbor, the newspaper said.
Over the last decade, Missile Defense Agency has spent $10 billion into the SBX project and three other programs that were killed or sidelined after they proved unworkable, the Times reported.


text:
Q: Designing a REST hierarchy where there is duplicate data We are having a debate on how to design REST endpoints.  It basically comes down to this contrived example.
Say we have:
/netflix/movie/1/actors <- returns actors A, B and C
/netflix/movie/2/actors  <- returns actors A, D, and E

Where the actor A is the same actor.
Now to get the biography of the actor which is "better" (yes, a judgement call):
/netflix/movie/1/actors/A
/netflix/movie/2/actors/A

or:
/actors/A

The disagreement ultimately stems from using Ember.js which expects a certain hierarchy -vs- the desire to not have multiple ways to access the same data (in the end it would truly be a small amount of code duplication). It is possible to map Ember.js to use the /actors/A so there is no strict technical limitation, this is really more of a philosophical question.
I have looked around and I cannot find any solid advice on this sort of thing.

A: I faced the same problem and went for option 2 (one "canonical" URI per resource) for the sake of simplicity and soundness (one type of resource per root).
Otherwise, when do you stop? Consider:
/actors/
/actors/A
/actors/A/movies
/actors/A/movies/1
/actors/A/movies/1/actors
/actors/A/movies/1/actors/B
...

A: I would, from an outsiders perspective, expect movies/1/actors/A to return information specific to that actor FOR that movie, whereas I would expect /actors/A to return information on that actor in general.
By analogy, I would expect projects/1/tasks/1/comments to return comments specific to the task - the highest level of the relationship via its url.
I would expect projects/1/comments to return comments related to the lower level project, or to aggregate all comments from the project.
The analogy isn't specific to the data in question, but I think it illustrates the point of url hierarchy leading to certain expectations about the data returned.

A: I would in this case clearly prefer /actors/A.
My reasoning is, that /movie/1/actors reports a list. This list, beeing a 1-n mapping between movie and actors, is not ment to be a path with further nodes. One simply does not expect to find actors in the movie tree.
You might one day implement /actors/A/movies returning 1 & 2, and this would make you implement URLs like /actors/A/movies/2 - and here you get recursion: movie/actor/movie/actor.
I´d prefer one single URL per object, and one clear spot where the 1-n mapping can be found.

redpajama_set_name: RedPajamaStackExchange


Getting in shape is about more than having washboard abs or rock-solid biceps - exercise is an essential building block to a healthier lifestyle for men and women.
To truly reap the benefits of diet and exercise, individuals have to make a total commitment to a healthy style of living. This includes gaining a greater understanding of the connection between nutrition and exercise.
A recent study suggests that engaging in light exercise after eating may be effective in helping lower triglyceride levels in the body. Participants in the study engaged in a combination of walking and low-resistance exercises after eating high-fat meals.
Published in the February edition of Medicine & Science in Sports & Exercise, the official journal of the American College of Sports Medicine, the findings show that structuring exercise around meal times can help individuals gain greater results over time.
"Regular exercise is a good way to keep triglycerides from becoming elevated, and the results of this study may help individuals manage their triglyceride levels more effectively by considering the timing," said study author Wataru Aoi, Ph.D., of Kyoto Prefectural University.
Triglycerides are lipids in the bloodstream and are stored in fat cells. When levels are too high, triglycerides can leave individuals more susceptible to cardiovascular issues, including heart disease, as well as high cholesterol, according to the Mayo Clinic.
If you want to make the most of your fitness plan, you should consider the times and intensity at which you're working out. By scheduling a quick trip to the gym after lunch, or walking the dog after dinner, you can optimize your workout to gain the best results.
For instance, with a versatile piece of equipment like an Arc Trainer, you can engage in light work out and steadily work your way up to more intensive sessions. Training on the Arc Trainer can help improve cardiovascular wellness and hasten heart rate recovery times, which can enable you to improve your workout capacity. To raise your endurance, consider engaging in up to three 30-minute workouts per week.
Use these 8 exercises to be ready for skiing & snowboarding, all winter long.


text:
Q: Rolled back Windows 11 Insider VM to Windows 10 and my product key does not work I reinstalled an evaluation version of Enterprise to replace my insider 11, since I don't have a TPM installed.  It (Windows 11) got installed up to a certain point but then stopped letting me update.
This evaluation version in my VM is not pre-activated, leaving me to believe the reinstall changed whatever Microsoft used to check for a digital license.
I tried entering the same product key into my VM to activate it, and they told me the product key did not work.
How can I release the key so I can again consume it from this VM?


Charlton Athletic FC - Facebook Photo - What's been your favourite home game of 2018/19 so far? 🤔 | Fantasticoh!
Charlton Athletic take on Hartlepool United at The Valley. The League One Championship is already secured so it's party time!!!!


text:
\section{Introduction}\label{sec:intro}
    Thanks to recent progress in high-performance computing, radiation hydrodynamics (RHD)
    simulations are now popular in many research fields in astrophysics.
    Accordingly, numerical schemes for RHD simulations have been developed.
    However, it is also crucial to use appropriate opacities in order to
    obtain correct solutions of RHD equations,
    {\color{black} which is the focus of this study.}
    {\color{black} To save computational time in RHD simulations, it is fairly common to solve a
      frequency-averaged radiative transfer equation with
    the local thermodynamic equilibrium (LTE) assumption. In this case,}
    Rosseland and Planck mean opacities as functions of temperature
    and pressure are required to perform RHD simulations \citep[e.g.,][]{Hirose:2014}.

    Although the methods for calculating {\color{black} gas} opacities have been established,
    {\color{black} significant} effort is required to calculate them in practice.
    For example, one has to gather data pertaining to relevant opacity sources scattered
    throughout the literature or on the web and develop
    complicated interfaces capable of reading {\color{black} various} types of data.
    Moreover, it is computationally intensive to calculate line opacities from
    very large line lists such as those provided by Exomol\footnote{\texttt{http://www.exomol.com/}}
    \citep{Tennyson:2012}.
    Therefore, researchers {\color{black} tend to} use publicly available opacity tables.
    In the literature, there are a number of papers that provide opacity tables
    \citep{Cox:1970a,Cox:1970b,Alexander:1975,Alexander:1983,Sharp:1992,Alexander:1994,
      Bell:1994,Pollack:1994,Henning:1996,Helling:2000,Semenov:2003,Ferguson:2005,
      Freedman:2008,Helling:2009,Malygin:2014},
    including {\sc Opal} Project\footnote{\texttt{https://opalopacity.llnl.gov}} \citep{Rogers:1992} and
    Opacity Project\footnote{\texttt{http://cdsweb.u-strasbg.fr/OP.htx}} \citep[][]{Seaton:1992}.

    As summarized in Table A.1 in \citet{Semenov:2003}, the various opacity tables
    differ depending on the research purpose and thus
    differ in composition, opacity sources, ranges of temperature and pressure, and
    outputs.
    Consequently, one cannot always obtain an opacity table that meets
    one's research purpose.
    {\color{black} One can create a hybrid table that covers larger ranges by combining
      different tables \citep[e.g., Fig. 2 in][]{Hirose:2014}; however,
    it is not guaranteed that the tables will share the same boundary values. }
    As pointed out by \citet{Malygin:2014}, disagreements in opacity values
    between different tables could be caused not by only different assumptions being applied but also because of the use of
    different sampling points. This makes comparison of different opacity tables difficult
    unless table codes are publicly available. Another issue is that not all public tables are
    updated regularly.

    For these reasons, we decided to develop a public code, {\color{black} named {{\sc Optab}}}, that can be used
     to generate opacity tables
     {\color{black} using} opacity sources and sampling points chosen by the user.
    In the first version of the code, we consider only gas opacities,
    whose {\color{black} physics are well understood}.
    Our code outputs Rosseland, Planck, and two-temperature Planck mean opacities, as well as
    the monochromatic opacity.
    {\color{black} The two-temperature Planck mean opacity (Eq. \ref{eq:two-temp-Planck})
      is needed when one considers the case in which the radiation and gas temperatures
      differ, such as an accretion disk irradiated by the central star \citep[e.g.,][]{Hirose:2019}.}
    In the literature, the public code {\sc Dfsynthe} \citep{Castelli:2005} can
    be used to generate opacity tables \citep{Malygin:2014}. Additionally,
    {\sc Opal}\footnote{\texttt{https://www.cita.utoronto.ca/\~{}boothroy/kappa.html}}
    \citep{Rogers:1992} and \citet{Semenov:2003}
    \footnote{\texttt{https://www2.mpia-hd.mpg.de/\~{}semenov/Opacities/opacities.html}} provide
    public codes for generating opacity tables.
    In contrast to these codes,
    our code is {\color{black} developed} for modern high-performance computing --- it is written in
    Fortran 90 using Message Passing Interface (MPI) and Hierarchical Data Format,
    Version 5 (HDF5)\footnote{\texttt{https://www.hdfgroup.org/solutions/hdf5/}} ---
    and addresses both readability and portability.
    Furthermore, our code is {\color{black} available} at
    GitHub\footnote{\texttt{https://github.com/nombac/optab}}
    and allows for continuous updates through contributions by users.

    The goal of this code is not to provide complete opacity tables for a
    specific purpose, but to provide a platform on which users can generate opacity
    tables for their own purposes.
    Therefore, while opacity sources initially implemented in our code
    are {\color{black} basic ones}, the code is written so that
    a user can easily modify, change, or add opacity sources.

    We note that {{\sc Optab}} does not solve the chemical equilibrium (CE) condition {\color{black}
    to obtain equilibrium abundances of species that are needed for
    calculating opacities. We assume that
    the user has obtained this solution using an external program.}
    {\color{black} Recently, public CE solvers for astrophysics, including }
    {\sc FastChem} \citep{Stock:2018} and {\sc Tea} {\color{black} \citep{Blecic:2016}}, have been made available.

    In Sect. \ref{sec:code_desc}, the structure of the code and the opacity sources implemented in our code are described.
    In Sect. \ref{sec:opacity}, the details of the opacity calculations in our code are given.
    In Sect. \ref{sec:reduce_line}, a method to reduce the computational effort in line opacity calculations is described.
    In Sect. \ref{sec:example},    {\color{black} the results of validation tests to evaluate the performance of our code are presented.}
    Finally, future aspects are discussed in Sect. \ref{sec:future}.

    \section{Code description}\label{sec:code_desc}

    {{\sc Optab}} is written in Fortran 90 using the MPI library for parallel computing as well as
    the HDF5 library for flexible and efficient {\color{black} parallel} Input/Output (I/O) of very large atomic or molecular line lists.

    In Table \ref{table:source}, we list the opacity sources implemented in the first version
    of {{\sc Optab}}. All sources are publicly available, and the choice of sources is
    based on {\color{black} the} {\sc Phoenix} code {\color{black} \citep{Hauschildt:1999, Allard:1995}}\footnote{\texttt{https://www.physik.uni-hamburg.de/en/hs/group-hauschildt/research/phoenix.html}}.
    Because {\color{black} each subroutine calculating each opacity is modularized},
    the user can easily modify the code to change or add opacity sources.
    {\color{black} To calculate opacities, in addition to the opacity sources,
      some supplementary data providing atomic properties are needed,
      which are obtained from the National Institute of Standards and Technology (NIST) Atomic Spectra Database (ASD) levels form\footnote{\texttt{https://physics.nist.gov/PhysRefData/ASD/levels\_form.html}} {\color{black} \citep{Kramida:2020}}
      and NIST Atomic Weights and Isotopic Compositions with Relative Atomic Masses (AWIC)\footnote{\texttt{https://www.nist.gov/pml/atomic-weights-and-isotopic-compositions-relative-atomic-masses}} \citep{Meija:2016,Berglund:2011}.
    }

    \begin{table*}
      \caption[]{Opacity sources {\color{black} implemented in the first version of {{\sc Optab}}}. Sources of collision-induced absorption are not listed here for brevity.}
      \label{table:source}
      \begin{tabular}{ccccc}
        \hline
        \noalign{\smallskip}
        & Bremsstrahlung & Photoionization & Rayleigh scattering & Line absorption\\

        \hline
        \noalign{\smallskip}
        \begin{tabular}{c}atoms /\\{\color{black}atomic ions}\end{tabular} & \citet{vanHoof:2014} & \begin{tabular}{c}\citet{Verner:1995}\\\citet{Verner:1996}\\{\color{black} compilation by} \citet{Mathisen:1984}\\{\color{black} TOPbase}\end{tabular}&& Kurucz     \\

        molecules &  & & &\begin{tabular}{c}HITRAN\\Exomol\end{tabular}    \\
          \hline
          \noalign{\smallskip}
          H          &                   &                &\citet{Lee:2005}&\\
          He         &                   &                &\citet{Rohrmann:2018}&\\
          H$_2$      &                   & \citet{Yan:2001}  &\citet{Tarafdar:1973}&\\
          H$^-$      & \citet{John:1988}    & \citet{Ohmura:1960} &             &\\
          H$_2^-$    & \citet{John:1975}    &                &             &\\
          \noalign{\smallskip}
          \hline
      \end{tabular}
    \end{table*}

    As shown in Table \ref{table:source}, {{\sc Optab}} currently
    accepts the Kurucz line lists\footnote{\texttt{http://kurucz.harvard.edu/linelists}} for atomic lines,
    and the HITRAN\footnote{\texttt{https://hitran.org/}}
    \citep{Gordon:2017} and Exomol line lists for molecular lines.
    Because these line lists are extremely large and are repeatedly accessed in the code,
    they are converted to HDF5 files {\color{black} from their original ASCII files} beforehand.
    In addition, HITRAN collision-induced absorption (CIA) data and the supplementary data for atomic
    properties taken from the NIST ASD/AWIC are converted and stored in an HDF5 file, respectively.
    The details of these conversions are described in Appendix \ref{sec:data_prep}.

    Fig. \ref{fig:flowchart} shows the flowchart for {{\sc Optab}}.
    First, the code reads parameters that determine the opacity sources to be considered, the wave number grid ${\tilde{\nu}}_k$ [cm$^{-1}$] ($k$ is the grid index), and the line profile evaluation described in Sect. \ref{sec:reduce_line}. Then, it reads CE abundances based on which the opacities are computed, which are prepared by the user for some pairs of temperature and pressure (i.e., ``layers''). The equilibrium abundances needs to be stored in a specified HDF5 format; the {{\sc Optab}} package provides codes for storing the outputs of {\sc FastChem} and {\sc Tea} in the HDF5 format.

    \begin{figure}
      \centering
      \includegraphics[width=8cm]{PDF/flowchart.pdf}
      \caption{Flowchart of {{\sc Optab}}.
        The external files in the gray boxes are in the HDF5 format,
        which have been converted from their original ASCII files (Appendix \ref{sec:data_prep}).
      }
      \label{fig:flowchart}
    \end{figure}

    After reading the above data, the code computes the continuum opacities, line opacities,
    and the mean opacities, and {\color{black} repeats the computations for each layer.
      Here, opacity sources of small size are coded inline, while those of
    large size are read from external files.}
    MPI parallelization is performed for the layer loop (Sect. \ref{sec:mpi}).
    As the final step of the layer loop, the absorption and scattering coefficients together
    with the mean opacities {\color{black} for each layer} are written into a single HDF5 file.

    \section{Opacity calculations}\label{sec:opacity}

    While we use the wavenumber ${\tilde{\nu}}$ for the computational grid in {{\sc Optab}},
    we also use the frequency $\nu = c{\tilde{\nu}}$, photon energy $E = hc{\tilde{\nu}}$, or
    wavelength $\lambda = 1/{\tilde{\nu}}$ in the following sections, depending on the context.
    Here, $c$ and $h$ are the speed of light and the Planck constant, respectively.

    \subsection{Notes on partition functions}
    The opacity calculation for LTE gas uses the fact that the level population obeys
    the Maxwell-Boltzmann distribution, where the number density of a species
    in energy level $l$ at temperature $T$ and pressure $P$ is written as
    \begin{align}
      &N_l(T,P) = N(T,P)\dfrac{g_l\mathrm{e}^{-\frac{E_l - E_1}{k_\text{B} T}}}{Q(T)}.\label{eq:Boltz_distr}
    \end{align}
    Here, $Q(T)$ is the internal partition function defined as
    \begin{align}
      Q(T) \equiv \sum_lg_l\mathrm{e}^{-\frac{E_l - E_1}{k_\text{B} T}}, \label{eq:pf}
    \end{align}
    $g_l$ and $E_l$ are the statistical weight and energy of the
    level $l$, respectively ({\color{black} $E_1$ is the energy of the ground state}),
    and $k_\text{B}$ is the Boltzmann constant.

    The total number density $N(T,P) = \sum_lN_l(T,P)$ in Eq. (\ref{eq:Boltz_distr}) for each species is determined by
    a CE calculation, {\color{black} where $Q(T)$ also plays
      an important role. This is because} the chemical potential $\mu(T,P)$ [J mol$^{-1}$] used in a
    CE calculation is uniquely related to $Q(T)$ as
    \begin{align}
      \mu(T,P) - N_\text{A}E_1 = RT\ln\left(\dfrac{P}{k_\text{B} T}\left(\dfrac{h^2}{2\mathrm{\pi} mk_\text{B} T}\right)^\frac32\dfrac{1}{Q(T)}\right), \label{eq:chemical_po}
    \end{align}
    where $N_\text{A}$ is the Avogadro constant [mol$^{-1}$], $R$ is the gas constant [J K$^{-1}$ mol$^{-1}$], and $m$ is the mass of the atom or molecule \citep[Eq. 24.50 in][]{McQuarrie:1997}.
    Therefore, for the LTE opacity to be consistent with the CE, the same
    partition function should be used. For more details, we refer the readers to Appendix \ref{sec:pf}.

    In practice, this cannot be done {\color{black} for the following} reasons:
    i) In a CE calculation,
    $\mu$ is usually computed from thermochemical databases
    based on experiments such as NIST-JANAF \citep{Chase:1998} or NASA Chemical Equilibrium with Applications (CEA) \citep{McBride:1992}.
    However, because such thermochemical databases do not consider isotoplogues,
    they cannot be used to calculate $Q(T)$ (by means of Eq. \ref{eq:pf_janaf}) for the LTE opacity calculations,
    in which isotopologues are considered. ii) On the other hand,
    the number of species for which $Q(T)$ is
     provided along with the line lists is not sufficient for performing a CE calculation.
     {\color{black} For example, the number of molecular species in the HITRAN line lists is 55},
     whereas that used in a CE solver {\sc FastChem} is 436 \citep[Table 2 in][]{Stock:2018}.

     {\color{black} Because of reasons i) and ii), we have to admit that in practice
      different partition functions may be used between the CE calculation and the LTE opacity calculations.
      In our code, for {\color{black} Kurucz atomic lines}, we use
      {\color{black} the Kurucz level data \texttt{gf????(z).gam}\footnote{\texttt{http://kurucz.harvard.edu/atoms.html}}}
      to calculate $Q(T)$ from the definition (Eq. \ref{eq:pf}). {\color{black} We note that the Kurucz level data are not available
      for some species, for which we use the NIST ASD levels instead.}
      For {\color{black} molecular lines}, we employ
    tabulated partition functions provided with the line lists

    Hereafter, we omit the dependence of number densities $N$ on temperature $T$ and pressure $P$ for brevity.
    Accordingly, we omit the dependence of absorption coefficients $\alpha$ [cm$^{-1}$] on $P$.

    \subsection{Bremsstrahlung}\label{sec:brems}
    The absorption coefficient of the bremsstrahlung of an atomic ion of charge $Ze$
    (where $Z \ge 1$ is the charge number and $e$ is the elementary charge)
    is written as \citep[e.g.,][]{Rybicki:2008}
    \begin{align}
      \dfrac{\alpha_\text{bre}(\nu;T)}{N_\text{e}N_\text{ion}} &= \left(\dfrac{4}{3}\sqrt{\dfrac{2\mathrm{\pi} m_\text{e}}{3}}\dfrac{e^6}{m_\text{e}^2ch}\right)\dfrac{1 - \text{e}^{-\frac{h\nu}{k_\text{B} T}}}{\sqrt{k_\text{B} T}{\nu}^3}Z^2{\bar{g}_\text{ff}}(\gamma^2,u).\label{eq:brems}
    \end{align}
    {\color{black} Here, the thermally averaged Gaunt factor, $\bar{g}_\text{ff}$, is a
    function of the scaled quantities $\gamma^2 \equiv {Z^2\text{Ry}}/{k_\text{B} T}$
    and $u \equiv {h\nu}/{k_\text{B} T}$, and $N_\text{e}$, $N_\text{ion}$, and $m_\text{e}$ are
    the number densities of free electrons and ions, and the electron mass, respectively.
    Ry is an energy unit, the Rydberg, which is approximately $13.6$ eV.}
    Our code employs a numerical table for ${\bar{g}_\text{ff}}(\gamma^2,u)$ provided
    by \citet{vanHoof:2014} to compute Eq. (\ref{eq:brems}) for elements ranging from hydrogen (H) to zinc (Zn).
    {\color{black} Then, the total coefficient is obtained by summing up the coefficients of
      H$^+$, He$^+$, He$^{2+}$, \dots, and Zn$^{30+}$.}

    In addition, we have implemented the bremsstrahlung absorption of H$^-$ and H$_2^-$
    based on \citet{John:1988} and \citet{John:1978}, respectively.
    In the former, the absorption coefficient per electron pressure ($P_\text{e}$) per number density of H ($N_\text{H}$) [cm$^2$dyne$^{-1}$] is given as a function of $\lambda$ and $T$. In the latter, the absorption coefficient per $P_\text{e}$ per $N_\text{H$_2$}$ is given as a function of ${\tilde{\nu}}$ and $T$.

    \subsection{Photoionization}\label{sec:photoionization}

    A general expression for the photoionization absorption coefficient is
    \begin{align}
      \alpha_\text{pho}(\nu;T) &= \left(1-\text{e}^{-\frac{h\nu}{k_\text{B} T}}\right)\sum_l \sigma_{l} N_{l},
    \end{align}
    which is rewritten using Eq. (\ref{eq:Boltz_distr}) as
    \begin{align}
      \dfrac{\alpha_\text{pho}(\nu;T)}{N}&= \left(1-\text{e}^{-\frac{h\nu}{k_\text{B} T}}\right) \dfrac{1}{Q(T)}\sum_l \sigma_{l}{g_{l}\text{e}^{-\frac{E_{l}}{k_\text{B} T}}}, \label{eq:photo}
    \end{align}
     where $\sigma_{l}$ is the photoionization cross-section of energy level $l$, {\color{black} and $(1 - \text{e}^{-{h\nu}/{k_\text{B} T}})$ is a correction factor for the induced absorption.}

    For atoms and their positive ions, the last factor in Eq. (\ref{eq:photo}) (a summation on the energy levels) is expressed in our code as
    \begin{align}
      &\sum_l \sigma_{l}{g_{l}\text{e}^{-\frac{E_{l}}{k_\text{B} T}}} = \sigma_{1}g_1 + \sum_{l\ge2} \sigma_{l}{g_{l}\text{e}^{-\frac{E_{l}}{k_\text{B} T}}},\\
      &\sigma_{1} \equiv \begin{cases}
        \sigma^\text{(v96)}(E) & E \le E_\text{max}\\
        \sum_{nm}\sigma_{nm}^\text{(v95)}(E) & E > E_\text{max}
        \end{cases},\label{eq:E_max}
    \end{align}
    where $n$ and {\color{black} $m$} are the principal quantum number of the shell and the subshell orbital quantum number, respectively.

    {\color{black} Eq. (\ref{eq:E_max}) indicates that} we employ a hybrid of \citet{Verner:1995} and \citet{Verner:1996} ($\sigma_{nl}^\text{(v95)}$ and $\sigma^\text{(v96)}$, respectively) for photoionization originating from the ground level ($l = 1$) {\color{black} depending on $E_\text{max}$, which} is a parameter given in \citet{Verner:1996} and is specific to the species. \citet{Verner:1995} proposed a fitting formula to the partial photoionization cross-sections based on Hartree-Dirac-Slater calculations for the ground state shells (of elements from H to Zn). \citet{Verner:1996} presented a set of analytic fits to the photoionization cross-sections (of elements from H to Si, and for S, Ar, Ca, and Fe) calculated by the Opacity Project (OP), which are more accurate at low energies.
    In Fig. \ref{fig:x_MgI}, {\color{black} the brown curve} shows how the above hybrid photoionization cross-section is applied to Mg atoms, {\color{black} where $E_\text{max} = 54.90$ eV, or $\tilde\nu = 4.428\times10^5$ cm$^{-1}$.}

    \begin{figure}
      \centering
      \includegraphics[width=8cm]{PDF/x_MgI_photo.pdf}
      \caption{Magnesium photoionization absorption coefficients per Mg atom [cm$^{2}$] at $5000$ K. {\color{black} The brown curve indicates the photoionization from the ground level, and is a hybrid of \citet{Verner:1996} (outer-subshell contributions; yellow) and \citet{Verner:1995} (inner-subshell contributions; cyan). Both the magenta and black thin curves indicate the photoionization from excited levels; the former is based on the \citet{Mathisen:1984} compilation, whereas the latter is based on TOPbase.}
      }
      \label{fig:x_MgI}
    \end{figure}

    {\color{black} As for photoionization cross-sections from excited states ($l \ge 2$), {\sc Optab} provides two options: cross-sections compiled by \citet{Mathisen:1984} and cross-sections available at the Opacity Project online atomic database, TOPbase \citep{Cunto:1992}. Both databases provide a set of $\left\{\sigma_{l}, g_{l}, E_{l}\right\}$ for selected photoionization channels of selected species that can be used in Eq. (\ref{eq:photo}).
      TOPbase is generally more comprehensive and more complete than the Mathisen's compilation.\footnote{\color{black} We note that some major species, including \ion{Fe}{I} and \ion{Fe}{II}, are not available at the web interface (\texttt{http://cdsweb.u-strasbg.fr/topbase/xsections.html}) but they are available in the ftp version (\texttt{http://cdsweb.u-strasbg.fr/topbase/ftp.html}).}
      In Fig. \ref{fig:x_MgI}, we compare the photoionization cross-sections from excited states between the Mathisen's compilation \citep[magenta;][]{Vernazza:1976,Thompson:1974,Bradley:1976,Vernazza:1981} and TOPbase (thin black). We observe that more detailed structures are resolved in the TOPbase photoionization cross-sections; however, they require higher computational costs.}

     For H and He$^+$ (hydrogenic atoms and ions),
     the photoionization cross-section is written in terms of Kramers' semi-classical formula as \citep[e.g.,][]{Carson:1968}\footnote{There is an exact analytic expression of the cross-sections for the ground level of hydrogenic atoms and ions \citep[Eq. (13.1) in][]{Draine:2011}.}
    \begin{align}
      &\sigma_n(\nu) \equiv \left[\dfrac{64\mathrm{\pi}^4}{3\sqrt{3}}\left(\dfrac{m_\text{e} e^{10}}{ch^6}\right)\left(\dfrac{Z^4}{n^5}\right)\dfrac{1}{\nu^3}\right] g\left(\dfrac{h\nu}{Z^2\text{Ry}},n\right),
    \end{align}
    where $n$ is the principal quantum number.
    {\color{black} For the Gaunt factor $g(h\nu/Z^2\text{Ry},n)$, fitting formulae by \citet{Chapman:1969,Chapman:1970} for the tables given in \citet{Karzas:1961} are recommended in
    \citet{Mathisen:1984}. However, we use the original tables in our code instead because we found the fitting formulae diverge in some cases.}

    {\color{black} In addition to the above, we have implemented photoionization absorption for H$^-$ and H$_2$. For the former  and latter, we employ} the cross-section formulas given in \citet{Ohmura:1960} and \citet{Yan:2001}, respectively.

    \subsection{Line absorption}

    The line absorption coefficient for the transition from state $l$ to state $u$ is expressed as
    \begin{align}
      \alpha_\text{line}({\tilde{\nu}};T) &= {N_l}\left(\dfrac{\mathrm{\pi} e^2}{m_\text{e} c}\right) f_{lu} \dfrac{\phi_{ul}({\tilde{\nu}})}{c}\left(1 - \mathrm{e}^{-c_2{\tilde{\nu}}/T}\right),
    \end{align}
    where $c_2\equiv hc/k_\text{B}$,  $\phi_{ul}({\tilde{\nu}})$ [cm] is the line profile in terms of the wavenumber ${\tilde{\nu}}$, and $f_{lu}$ is the oscillator strength {\color{black} from state $l$ to state $u$.\footnote{Exactly speaking, the line profile $\phi_{ul}({\tilde{\nu}})$ also depends on $T$ and $P$ via broadening parameters, which is omitted for brevity here.} }
    Because we consider LTE, the number density at state $l$ of the species being considered can be written as (cf. Eq. \ref{eq:Boltz_distr})
    \begin{align}
      N_l = x^\text{(iso)}N \dfrac{g_l\mathrm{e}^{-c_2\tilde{E}_l/T}}{Q(T)},
    \end{align}
    where $N$ is the total number density of the species, and $\tilde{E}_l \equiv E_l / hc$ is the level energy in
    terms of the wavenumber.
    We {\color{black} have introduced} the isotope or isotopologue fraction $x^\text{(iso)}$ (cf. Appendix \ref{sec:data_prep}) because the line transitions are different between different isotope or isotoplogues.
    Then the absorption coefficient is written as
    \begin{align}
      &\dfrac{\alpha_\text{line}({\tilde{\nu}};T)}{N} = x^\text{(iso)} S_{lu}\phi_{ul}({\tilde{\nu}}) {\color{black} \left(1 - \mathrm{e}^{-{c_2{\tilde{\nu}}}/{T}}\right)},\label{eq:line_abs}\\
      &S_{lu} \equiv{\left(\dfrac{\mathrm{\pi} e^2}{m_\text{e} c^2}\right) \left(g_l f_{lu}\right) \dfrac{\mathrm{e}^{-c_2\tilde{E}_l/T}}{Q(T)}},\label{eq:strength}
    \end{align}
    where $S_{lu}$ [cm] is the line intensity, and the factor $\left(g_l f_{lu}\right)$ is called the g-f value.

    \subsection{Line profile evaluation}
     In our code, we generally apply the Voigt profile, a convolution of the Gaussian and Lorentzian profiles, for the line profile $\phi_{ul}({\tilde{\nu}})$:
    \begin{align}
      \phi_{ul}({\tilde{\nu}})
      &= \int_{-\infty}^\infty \left\{\dfrac{1}{\sqrt{\mathrm{\pi}}\sigma_\text{G}}\mathrm{e}^{-\left(({{\tilde{\nu}}' - {\tilde{\nu}}_{ul}})/{\sigma_\text{G}}\right)^2}\right\}\left\{ \dfrac{1}{\mathrm{\pi}} \dfrac{\gamma}{({\tilde{\nu}} - {\tilde{\nu}}')^2 + \gamma^2} \right\}d{\tilde{\nu}}'\nonumber\\
      &= \dfrac{1}{\sqrt{\mathrm{\pi}}\sigma_\text{G}} K(x,y).\label{eq:line_prof}
    \end{align}
    Here, $K(x,y)$ is the Voigt function defined as
    \begin{align}
      &K(x,y) \equiv \dfrac{y}{\mathrm{\pi}}\int_{-\infty}^\infty \dfrac{\mathrm{e}^{-t^2}}{(x - t)^2 + y^2} dt,\\
      &x \equiv \dfrac{{\tilde{\nu}} - {\tilde{\nu}}_{ul}}{\sigma_\text{G}},\\
      &y \equiv \dfrac{\gamma}{\sigma_\text{G}},
    \end{align}
    {\color{black} and ${\tilde{\nu}}_{ul} \equiv {\tilde{\nu}}_{u} - {\tilde{\nu}}_{l}$ is the wavenumber of the line transition.}

     The Gaussian profile arises from the Doppler broadening owing to the thermal and turbulent motion of the absorbing particle. The Gaussian width $\sigma_\text{G}$ [cm$^{-1}$] is expressed as
    \begin{align}
      &\sigma_\text{G} \equiv \dfrac{\sqrt{2k_\text{B} T/m} + v_\text{turb}}{c}{\tilde{\nu}}_{ul},\label{eq:sigma}
    \end{align}
    where $m$ denotes the mass of the absorber. We have not implemented the turbulent velocity $v_\text{turb}$ in our code, but it can be easily implemented by modifying the source code.

    The Lorentzian profile arises from both natural broadening and collisional (pressure) broadening caused by neighboring perturbers. The Lorentz width -- the half-width at half-maximum (HWHM) of the Lorentz profile -- $\gamma$ [cm$^{-1}$] can be written as the sum of the two broadening widths:
    \begin{align}
      \gamma = \gamma_\text{nat} + \gamma_\text{coll}.\label{eq:gamma}
    \end{align}

    {\color{black} For the natural broadening $\gamma_\text{nat}$, if its width is not provided with the line list,
      we substitute the classical damping constant
    \begin{align}
      \gamma_\text{nat} = \dfrac12\dfrac{1}{2\pi c}\left(\dfrac23\dfrac{e^2\omega_{ul}^2}{mc^3}\right)\label{eq:nat_broad},
    \end{align}
    where $\omega_{ul} = 2\mathrm{\pi} c{\tilde{\nu}}_{ul}$ is the angular frequency of the line transition.}
    For the collisional broadening $\gamma_\text{coll}$, the molecular line lists in HITRAN or Exomol
    contain the van der Waals broadening width for most species, while
    the Kurucz atomic line list contains both the quadratic Stark broadening and the
    van der Waals broadening widths for most species.
    When the broadening widths are not available in the Kurucz line list,
    we compute them classically or semi-classically, as described in Appendix \ref{sec:classical_widths}.

    In our code, we use direct sampling to evaluate the line profile $\phi_{ul}({\tilde{\nu}})$ at a wavenumber grid point ${\tilde{\nu}}_k$, which means that
    \begin{align}
      \left.\phi_{ul}({\tilde{\nu}})\right|_{{\tilde{\nu}} = {\tilde{\nu}}_k} = \phi_{ul}({\tilde{\nu}}_k).
    \end{align}
    We note that there is another strategy to evaluate the line profile, which is to average the line profile over a grid bin. A comparison between direct sampling and a binned profile is available in \citet{Yurchenko:2018}.

    To evaluate the Voigt function $K(x,y)$, we employ {\color{black} an algorithm introduced in Sect. 4.3.4.5 in \citet{Aller:1982}:
      \begin{align}
        K(x,y) \approx \begin{cases}
          \displaystyle{yx^{-2}\sum_{j=0}^6c_jx^{-2j} + \left(1+y^2(1-2x^2)\right)\mathrm{e}^{-x^2}} & y\le10^{-1}, |x|\ge2.5\\
          \displaystyle{\Re\left[\dfrac{\displaystyle{\sum_{j=0}^6a_j\xi^j}}{\displaystyle{\left(\xi^7 + \sum_{j=0}^6b_j\xi^j\right)}}\right]} & \text{otherwise}
        \end{cases},
        \label{eq:voigt}
      \end{align}
      where $\xi \equiv y - ix$ and the coefficients $a_j$, $b_j$, and $c_j$ are listed in Table \ref{table:voigt}.
      The accuracy of Eq. (\ref{eq:voigt}) for a domain of ($0\le x\le 25, 10^{-10}\le y \le10^{2}$) is shown in Fig. \ref{fig:voigt} in terms of relative errors to the reference of \texttt{wofz} in SciPy.
      (Here, we intended to use the same color scale as in \citet{Schreier:2018} so that the accuracy can be directly compared with that of their methods.)
      The maximum error, which occurs around $(x,y) \approx (4,10^{-1})$, is less than 1\%.
      We also measured the computational time of Eq. (\ref{eq:voigt}), where an array of size $101$ was assigned for the $x$ domain ($0\le x\le 25$) while $y$ was being fixed, which is similar
      to the actual line-profile calculation.
      The result is shown on the right-hand side in Fig. \ref{fig:voigt} as a function of $y$, where the reference is the computational time of a Gaussian function. The computational speed of Eq. (\ref{eq:voigt}) is $\sim 2.5$ times slower than that of the Gaussian function for $y < 10^{-1}$ and is $\sim 4.5$ times slower for $y \geqq 10^{-1}$. Both the accuracy and computational speed of Eq. (\ref{eq:voigt}) are satisfactory for our purpose.
    }

    \begin{table*}
      \caption[]{Coefficients in the approximated Voigt function (Eq. \ref{eq:voigt})}
      \label{table:voigt}
      \begin{tabular}{cccc}
        $j$ & $a_j$ & $b_j$ & $c_j$\\
        \hline
        0 &122.607931777104326&122.607931773875350&0.5641641\\
        1 &214.382388694706425&352.730625110963558&0.8718681\\
        2 &181.928533092181549&457.334478783897737&1.474395\\
        3 &93.155580458138441&348.703917719495792&-19.57826\\
        4 &30.180142196210589&170.354001821091472&802.4513\\
        5 &5.912626209773153&53.992906912940207&-4850.316\\
        6 &0.564189583562615&10.479857114260399&8031.468\\
        \hline
      \end{tabular}
    \end{table*}

    \begin{figure}
      \centering
      \includegraphics[width=8cm]{PDF/voigt.pdf}
       \caption{\color{black} Error of the approximated Voigt function (Eq. \ref{eq:voigt}) relative to the \texttt{wofz} reference (left; logarithmic) and computational time relative to that of the Gaussian function (right; linear).
      }
      \label{fig:voigt}
    \end{figure}

    \subsection{Collision-induced absorption}

    HITRAN provides tabulated coefficients $k_{\tilde{\nu}}^{(\text{A,B})}$ [cm$^5$ molecules$^{-2}$] for a binary collision complex involving species A and B, from which the total absorption coefficient of CIA is computed as
    \begin{align}
      {\color{black} \alpha_\text{CIA}(\nu,T) = \sum_{(A,B)} k_{\tilde{\nu}}^{(\text{A,B})}N_\text{A}N_\text{B}}.\label{eq:CIA}
    \end{align}
    Here, the coefficients $k_{\tilde{\nu}}^{(\text{A,B})}$ includes the correction factor of induced absorption.
    In our code, {\color{black} we consider} pairs of (A,B) = (H$_2$,H$_2$), (H$_2$,He), (N$_2$,N$_2$), (CH$_4$,He), (CO$_2$,CH$_4$), (CO$_2$,CO$_2$), (CO$_2$,H$_2$), (CO$_2$,He), (H$_2$,CH$_4$), (H$_2$,H), (He, H), (N$_2$,H$_2$O),
    (N$_2$,H$_2$), (N$_2$,He), (O$_2$,CO$_2$), (O$_2$,O$_2$), and (O$_2$,N$_2$).

    \subsection{Scattering}\label{sec:scattering}
    With respect to scattering, in addition to Thomson scattering, whose cross-section is
    \begin{align}
      &\sigma_\text{T} = \dfrac{8\mathrm{\pi}}{3}\left(\dfrac{e^2}{m_\text{e} c^2}\right)^2,
    \end{align}
    we have implemented the Rayleigh scattering of {\color{black} {H}} in the ground state \citep{Lee:2005}, {\color{black} H$_2$} \citep{Tarafdar:1973}, and {\color{black} {He}} in the ground state \citep{Rohrmann:2018}.
    \citet{Lee:2005} reported an exact low-energy expansion of the cross-section redward of Lyman $\alpha$. \citet{Rohrmann:2018} reported analytical expressions for the cross-section including resonances, with reasonable precision up to the 15th resonance.

    We assume that the scattering is isotropic and coherent, {\color{black} in which case, any induced scattering is canceled out between the in- and out-scattering.}  Then, the scattering coefficient can be written
    as the sum of the number density $N$ times the scattering cross-section $\sigma^\text{(s)}$:
    \begin{align}
      {\color{black} \alpha^\text{(s)}({\tilde{\nu}};T) = N_\text{e}\sigma_\text{T} + \sum_{i = \text{{H},{He}}}{{N_i}_1}\sigma^\text{(s)}_i({\tilde{\nu}}) + N_\text{H$_2$}\sigma^\text{(s)}_\text{H$_2$}({\tilde{\nu}}),}
    \end{align}
        {\color{black} where ${N_i}_1 \equiv N_i {g_i}_1/Q_i$ and $\sigma^\text{(s)}_i$ denote the number density in the ground state and the scattering cross-section of species $i$, respectively.}

    \subsection{Mean opacities}\label{sec:mean_opacities}
   {\color{black} The total absorption coefficient is the sum of all the absorption coefficients described above:}
   \begin{align}
     {\color{black} \alpha_\text{total} \equiv \alpha_\text{bre} + \alpha_\text{pho} + \alpha_\text{line} + \alpha_\text{CIA}},
   \end{align}
       {\color{black} where necessary sums related to species and transitions are taken for each term}.

       {\color{black} The Rosseland mean opacity $\bar\alpha_\text{R}$ and Planck mean opacity $\bar\alpha_\text{P}$ are defined, respectively, as}
    \begin{align}
      &\dfrac{1}{\bar\alpha_\text{R}(T)} \equiv \left. \int\dfrac{1}{\alpha_\text{total}({\tilde{\nu}};T)+\alpha^\text{(s)}({\tilde{\nu}};T)} \dfrac{{\partial} B_{\tilde{\nu}}(T)}{{\partial} T}d{\tilde{\nu}} \middle/ \int \dfrac{{\partial} B_{\tilde{\nu}}(T)}{{\partial} T}d{\tilde{\nu}} \right.,\\
      &{\color{black} \bar\alpha_\text{P}(T;T_{2}) \equiv \dfrac{\int \alpha_\text{total}({\tilde{\nu}};T) B_{\tilde{\nu}}(T_\text{2})d{\tilde{\nu}}}{\int B_{\tilde{\nu}}(T_{2})d{\tilde{\nu}}}},\label{eq:two-temp-Planck}
    \end{align}
    {\color{black} where $T_2 = T$ (gas temperature) for the normal Planck mean opacity and $T_2 = T_\text{rad}$ (external radiation temperature) for the two-temperature Planck mean opacity}. $B_{\tilde{\nu}}(T)$ and ${\partial} B_{\tilde{\nu}}/{\partial} T$ are, respectively, the Planck function in terms of wavenumber ${\tilde{\nu}}$ and its temperature derivative:
    \begin{align}
      &B_{\tilde{\nu}}(T) \equiv B_\nu(T)\dfrac{d\nu}{d{\tilde{\nu}}} = 2hc^2\dfrac{{\tilde{\nu}}^3}{\exp(c_2{\tilde{\nu}}/T) - 1},\\
      &\dfrac{{\partial} B_{\tilde{\nu}}(T)}{{\partial} T} = 2hc^2\dfrac{c_2{\tilde{\nu}}^4\exp(c_2{\tilde{\nu}}/T)}{T^2(\exp(c_2{\tilde{\nu}}/T) - 1)^2},
    \end{align}
    where $B_\nu(T)$ is the Planck function in terms of frequency $\nu$. We note that the dependence {\color{black} of the opacities} on pressure $P$ is omitted here.

    {\color{black}
      We use the trapezoid rule to evaluate integrals on wavenumber ${\tilde{\nu}}$ for the Rosseland mean opacity $\bar\alpha_\text{R}$. As for the Planck mean opacity $\bar\alpha_\text{P}$, the integration of absorption coefficients on the wavenumber ${\tilde{\nu}}$ strongly depends on the grid resolution, particularly for lines. Therefore, while we evaluate the continuum part of the Planck mean opacity using the trapezoid rule on the wavenumber grid, we evaluate the line part as follows \citep[cf.][]{Mayer:2005}:
      \begin{align}
        &\bar\alpha^\text{line}_\text{P}(T;T_2) \approx \dfrac{\sum_{lu}Nx^\text{(iso)}S_{lu}\left(1 - \exp\left(-c_2{\tilde{\nu}}_{ul}/T\right)\right)B_{{\tilde{\nu}}_{ul}}(T_2)}{\int B_{\tilde{\nu}}(T_{2})d{\tilde{\nu}}},\label{eq:planck_mean}
      \end{align}
      which is independent of the wavenumber grid. Here, we assume the line profile $\phi_{ul}({\tilde{\nu}}) \approx \delta({\tilde{\nu}}-{\tilde{\nu}}_{ul})$, and the summation $\sum_{lu}$ is taken for all the transitions (the summation on the species is omitted for brevity). The validation of this method to evaluate the Planck mean opacity is described in Section \ref{sec:code_parameters}.
    }

    \section{Reducing computational effort in the line opacity calculations}\label{sec:reduce_line}

    The bottleneck in the opacity calculations is the line absorption, particularly the Voigt profile
    calculation. This is because computation of the Voigt function $K(x,y)$ requires significant time
    \citep[e.g., discussion in][]{Schreier:2018}, and because the Voigt profile has wide wings
    and thus the number of grid points over which the function is evaluated is
    relatively large compared to the Gaussian profile.
    {\color{black} Ideally, the Voigt profile calculation should be performed for all line transitions at all grid points.}
    However,
    the number of transitions in the Kurucz atomic line list is several $10^8$, and that
    in the Exomol database exceeds $10^{10}$ for some species. Clearly, it is not practical to
    evaluate the line profile for all these transitions over grid points that can easily exceed $10^5$.
    In reality, not all transitions are strong enough to be evaluated, and the
    {\color{black} value of opacity} may be negligible at grid points far from the line center.

    {\color{black} Following the {\sc Phoenix} code, we have implemented an
      algorithm in our code} to reduce the number of ``Voigt lines'': lines for which the Voigt profile needs to be evaluated.
    The algorithm is represented by the pseudo code in Algorithm \ref{algo:line}.
    Suppose a line transition whose center and
    intensity are ${\tilde{\nu}}_{ul}$ and $S_{lu}$, respectively. We use the Gaussian profile to evaluate
    the nominal absorption coefficient at the line center as
    \begin{align}
      \alpha_\text{line}^* \equiv \dfrac{x^\text{(iso)}NS_{lu}}{\sqrt{\pi}{\color{black} \sigma_\text{G}}}.
    \end{align}
    Then we consider the following ratio:
    \begin{align}
      &\delta \equiv \dfrac{\alpha_\text{line}^*}{\alpha_\text{cont}^*},\label{eq:delta}\\
      &{\color{black} \alpha_\text{cont}^* \equiv \alpha_\text{bre}({\tilde{\nu}}_{k^*}) + \alpha_\text{pho}({\tilde{\nu}}_{k^*}) + \alpha_\text{CIA}({\tilde{\nu}}_{k^*})}.
    \end{align}
    Here $\alpha_\text{cont}^*$ is the continuum absorption coefficient at the grid point (${\tilde{\nu}}_{k^*}$) nearest to the line center (${\tilde{\nu}}_{ul}$).
    If $\delta < \delta_\text{crit}$ (typically $10^{-4}$ in our code), we consider the line to be too weak
    to contribute the total opacity and discard it.
    If $\delta > \delta_\text{voigt}$ (typically unity in our code), we consider the line to be sufficiently strong
    and evaluate the Voigt profile at grid points
    in the range {\color{black} ${\tilde{\nu}}_{ul} - \Delta_\text{V} \le {\tilde{\nu}} \le {\tilde{\nu}}_{ul} + \Delta_\text{V}$,
    where $\Delta_\text{V}$ is the search window (typically $\Delta_\text{V} = 100$} cm$^{-1}$ in our code).
    In other cases, {\color{black} where $\delta_\text{crit} < \delta < \delta_\text{voigt}$,}
    we consider that only the vicinity of the line center contributes to the total
    opacity and evaluate the Gaussian profile instead of the Voigt profile
    (we call this a ``Gauss line'').
    The search window for Gauss lines (typically $\Delta_\text{G} = 3{\color{black} \sigma_\text{G}}$ in our code) is usually much smaller than that for Voigt lines.
    {\color{black} These values of search windows for Voigt lines and Gauss lines, as well as the values of
      $\delta_\text{voigt}$ and $\delta_\text{crit}$, are user-defined parameters.}

    Fig. \ref{fig:nlines} demonstrates how the above
    algorithm considerably reduces the number of the time-consuming Voigt lines
    without introducing notable errors into the total opacity and mean opacities.
    The upper panel shows the dependence on the parameter $\delta_\text{crit}$
    with $\delta_\text{voigt} = 0$ fixed; {\color{black} that is, all considered lines are Voigt lines here}.
    (For comparison,
    the case in which the HITRAN's dynamic intensity cutoff \citep{Rothman:2013} is used
    instead of $\delta_\text{crit}$ is shown in the leftmost.)
     For example, when $\delta_\text{crit} = 10^{-3}$,
    the number of Voigt lines is reduced to {\color{black} 53} \% of that in the reference
    ($\delta_\text{crit} = \delta_\text{voigt} = 0$); however,
    the error in the mean opacity {\color{black} defined as $\sqrt{\left(\left({\bar\alpha - {\bar\alpha}^\text{(r)}}\right)/{{\bar\alpha}^\text{(r)}}\right)^2}$} as well as that in the  monochromatic
    opacity {\color{black}  defined as $\sqrt{\left.\sum_k \left(\left({\alpha_k - \alpha^\text{(r)}_k}\right)/{\alpha^\text{(r)}_k}\right)^2\middle/\sum_k\right.}$} are negligible {\color{black} (specifically,
      the largest error is {\color{black} 0.0020}, occurring in the Rosseland mean opacity)}.
    {\color{black} Here,} the superscript (r) and the subscript $k$ denote
    the reference and the grid point index, respectively.
    The lower panel shows the dependence on the parameter $\delta_\text{voigt}$
    with $\delta_\text{crit} = 10^{-4}$ fixed.
    For example, when $\delta_\text{voigt} = 1$, the number of Voigt lines is reduced to
    {\color{black} $8$}\% of that in the reference, and the errors are sufficiently low {\color{black} (specifically,
      the largest error of {\color{black} 0.0042} occurred in the monochromatic opacity)}.

    \begin{figure}
      \centering
      \includegraphics[width=8cm]{PDF/nlines.pdf}
       \caption{Relative number of the Voigt lines (gray bar) (as well as that of Gauss lines; light gray bar) against the total number of lines in the reference case ($\delta_\text{voigt} = \delta_\text{crit} = 0$). Also, relative errors of the Rosseland (triangle) and Planck (square) mean opacity as well as of the monochromatic absorption coefficient (filled circle) are plotted. {\color{black} The CE abundance data used here are taken from} the first layer of a demo output produced by {\sc FastChem}, {\tt chem\_output\_agb\_stellar\_wind.dat}.
         {\color{black} The asterisk in the upper panel indicates a run that employs HITRAN's dynamic strength cutoff, instead of $\delta_\text{crit}$.}
      }
      \label{fig:nlines}
    \end{figure}

    \begin{algorithm}
      \begin{algorithmic}[1]
        \Procedure{Line}{}
        \State Prepare layers and grid points
        \State Open a line list
        \Repeat
        \State Read a line block from the list
        \ForAll{layers prepared}
        \If{partition function $Q$ is not defined}
        \State Cycle
        \EndIf
        \If{number density $N = 0$}
        \State Cycle
        \EndIf
        \ForAll{lines in the read block}
        \State Compute line intensity $S$ {\color{black}{(\ref{eq:strength})}}
        {\color{black} \State Sum up $S$ for Planck mean (\ref{eq:planck_mean})}
        \State Compute Gaussian width $\sigma_\text{G}$ {\color{black}{(\ref{eq:sigma})}}
        \State Compute relative line strength $\delta$ {\color{black}{(\ref{eq:delta})}}
        \If{$\delta < \delta_\text{crit}$}
        \State Cycle
        \ElsIf{$\delta > \delta_\text{voigt}$}
        \State Set profile Voigt
        \State Set search window {\color{black} $\Delta_\text{V}$}
        \Else
        \State Set profile Gaussian
        \State Set search window {\color{black} $\Delta_\text{G}$}
        \EndIf
        \State Search grid points in the window
        \If{no grid point in the window}
        \State Cycle
        \EndIf
        \State Compute Lorentz width $\gamma$ {\color{black}{(\ref{eq:gamma})}}
        \ForAll{grid points in the window}
        \State Compute line profile $\phi$ {\color{black} (\ref{eq:line_prof})}
        \State Sum up absorption coefficient $\alpha$ {\color{black} (\ref{eq:line_abs})}
        \EndFor
        \EndFor
        \EndFor
        \Until{end of the line list}
        \State Close the line list
        \EndProcedure
      \end{algorithmic}
      \caption{Computation of the line absorption coefficients. The number in the parentheses indicates the corresponding equation.}
      \label{algo:line}
    \end{algorithm}

    {\color{black}

    \section{\color{black} Code validation and performance study}\label{sec:example}

    CE abundances for results presented in this section were obtained using the CE solver {\sc Aces}
    employed in the {\sc Phoenix} code. Here, the element abundance was based on \citet{Asplund:2005} and
    the total number of chemical species considered was 676, which consisted of 428 atomic species (including highly ionized ions) and 248 molecular species.

    \subsection{Comparison with \sc{Phoenix}}
    For the validation of the code, we compared the mean opacities generated by {\sc Optab} with those generated by {\sc Phoenix}. In Fig. \ref{fig:comp_phoenix}, the Rosseland mean, Planck mean, and two-temperature Planck mean (at a radiation temperature of $6000$ K) opacities are compared as functions of temperature for different total pressures. Here, exactly the same wavenumber grid and CE abundances were used. The opacity sources were chosen from those implemented in both {\sc Optab} and {\sc Phoenix}--- specifically, Kurucz atomic lines, Rayleigh scattering by H, He, and H$_2$, and bremsstrahlung and photoionization by atomic ions, including H$^-$. The line evaluation parameters described in Sect. \ref{sec:reduce_line} are set as $\delta_\text{crit} = 10^{-4}$, $\delta_\text{voigt} = 1$, $\Delta_\text{V} = 100$ cm$^{-1}$ ($\Delta_\text{V} = 100$ {\AA} for Phoenix runs), and $\Delta_\text{G} = 3\sigma_\text{G}$. Moreover, here we use the trapezoid rule to evaluate Planck mean opacities (cf. Sect. \ref{sec:mean_opacities}) because {\sc Phoenix} uses that method.

    Fig. \ref{fig:comp_phoenix} shows that the mean opacities generated by {\sc Optab} basically agree
    with those generated by {\sc Phoenix}. However, there are some discrepancies, particularly in the highest-pressure case ($\log P = 7$), at low temperatures for the Rosseland mean and at high temperatures for the Planck mean. We have identified that the former discrepancy originates from the line profile evaluation, whereas the latter originates from the collisional broadening evaluation.
    The line profile evaluation is performed in the wavenumber basis in {\sc Optab}, whereas it is performed in the wavelength basis in {\sc Phoenix}. As these two bases are identical only near the line center, there may be differences when line profile evaluations are performed for wide ranges. As for the collisional broadening evaluation, when the Kurucz database does not provide the value, {\sc Optab} and {\sc Phoenix} calculate it based on slightly different models (cf. Appendix \ref{sec:classical_widths} for the model employed by {\sc Optab}). The difference is notable when the collisional broadening becomes significant at high pressures.
    When {\sc Optab} employed the same methods as {\sc Phoenix} for evaluating the line profile and the collisional broadening, the generated mean opacities, represented by thin dotted curves in Fig. \ref{fig:comp_phoenix}, agreed with {\sc Phoenix} almost perfectly, as expected.

    \begin{figure}
      \centering
      \includegraphics[width=8cm]{PDF/comp_phoenix.pdf}
      \caption{\color{black} Comparison of mean opacities between {\sc Optab} (thin solid) and {\sc Phoenix} (thick): Rosseland mean (black), Planck mean (red), and two-temperature Planck mean for $T_\text{red} = 6000$K (blue) at $\log P = 7$ (top), $\log P = 2$ (middle), and $\log P = -3$ (bottom). The data represented by the thin dotted curves are explained in the text.
      }
      \label{fig:comp_phoenix}
    \end{figure}

    \subsection{Dependence on the number of grid points}\label{sec:code_parameters}

    In this section, we examine the dependence of mean opacities on the grid parameters. Fig. \ref{fig:comp_grid} shows the Rosseland mean, Planck mean, and two-temperature Planck mean opacities at $\log P = 2$ as a function of temperature. The opacity sources we adopted here are Kurucz atomic lines, HITRAN and HITEMP molecular lines, Rayleigh scattering by H, He, and H$_2$, and bremsstrahlung and photoionization by atomic ions, including H$^-$ and H$_2$. The wavenumber grid points were equally spaced on a logarithmic grid covering from $10$ to $10^7$ cm$^{-1}$.

    In each panel, curves of darker colors correspond to calculations using more grid points, ranging from $10^3$ to $10^7$. The Rosseland mean opacities (shown in the top panel) are almost identical when the grid points are $10^4$ or more. This is because the Rosseland mean opacities here are basically determined by the continuum sources. In contrast, the Planck mean and the two-temperature Planck mean opacities (shown in the middle and bottom panels, respectively) strongly depend on the number of the grid points because more line opacities are resolved with more grid points. For the Planck mean opacities (middle panel), as many as $10^6$ grid points are required for convergence, whereas convergence is not observed for the two-temperature Planck mean opacities (bottom panel) with $10^7$ or fewer grid points.

    To avoid the issue of convergence, {\sc Optab} calculates Planck mean and two-temperature Planck mean opacities for lines in a grid-independent way as described in Sect. \ref{sec:mean_opacities}, which are represented by thick light curves in the middle and bottom panels in Fig. \ref{fig:comp_grid}. As evident from the figures, the grid-independent calculation agrees with a grid-dependent calculation with the largest number of grid points for both Planck mean and two-temperature Planck mean opacities, which validates the method of the grid-independent calculation.

    As mentioned in Sect. \ref{sec:reduce_line}, {\sc Optab} has parameters that determines the grid-search window sizes, $\Delta_\text{G} (= 3\sigma_\text{G})$ and $\Delta_\text{V} (= 100 \text{cm}^{-1})$, where the values in the parenthesis are code defaults. We also investigated the dependence of the Rosseland mean opacities on these parameters, which was observed to be weak. As mentioned earlier, this is because the Rosseland mean opacities are mainly determined by the continuum sources in the case investigated here.

    \begin{figure}
      \centering
      \includegraphics[width=8cm]{PDF/comp_grid.pdf}
      \caption{\color{black} Dependence of Rosseland mean (top), Planck mean (middle), and two-temperature Planck mean for $T_\text{rad} = 6000$K at $\log P = 2$ on the number of grid points, equally spaced on a logarithmic grid. The thick light curves in the middle and the bottom panels are obtained via grid-independent calculations.
      }
      \label{fig:comp_grid}
    \end{figure}

    \subsection{MPI parallelization and its performance}\label{sec:mpi}

    In {\sc Optab}, MPI parallelization on the layer loop (Fig. \ref{fig:flowchart}) has been implemented. The parallelization performance is shown in Fig. \ref{fig:comp_mpi} against the mean opacity calculations for $64$ layers in total (composed of $8$ grid points both in the temperature and pressure grids as shown in Fig. \ref{fig:opactable}). The opacity sources were the same as those described in Sect. \ref{sec:code_parameters}, and the number of the  wavenumber grid points for computing the Rosseland mean opacities was $10^5$. The code parameters used were $\delta_\text{crit} = 10^{-4}$, $\delta_\text{voigt} = 1$, $\Delta_\text{G} = 3\sigma_\text{G}$, and $\Delta_\text{V} = 100$ cm$^{-1}$.

    The dependence of the wall time on the number of MPI processes is shown in the upper panel in Fig. \ref{fig:comp_mpi}. While the computation on each MPI process is independent (i.e., no message passing is necessary), it is often difficult to achieve the load balance between the MPI processes, as shown in the lower panel. This is because the most time-consuming part (i.e., the computation of line opacities) can differ significantly between the layers. Hence, the parallel performance becomes worse as the number of processes increases. We will attempt to improve the parallel performance in the future version of the code.

    \begin{figure}
      \centering
      \includegraphics[width=8cm]{PDF/timingj.pdf}
      \caption{\color{black} MPI parallel performance for parallelization on the layer loop (upper) and the load balance in the case of 8 MPI processes (lower). The white, gray, and black bars correspond, respectively, to the wall times for atomic lines, molecular lines, and continuum. The computation was performed, using gfortran 10.2 + Open MPI 4.1 + HDF5 1.12, on 2.3 GHz 8-Core Intel Core i9 processors.
      }
      \label{fig:comp_mpi}
    \end{figure}

    \begin{figure}
      \centering
      \includegraphics[width=8cm]{PDF/opactable_timing01j.pdf}
      \caption{\color{black} Rosseland mean (top), Planck mean (middle), and two-temperature Planck mean (bottom) opacities on the temperature--pressure grid composed of 64 points (layers).}
      \label{fig:opactable}
    \end{figure}

}

    \section{Discussion on future aspects} \label{sec:future}

    {\color{black} As demonstrated in the previous section, we have successfully
      developed a code that generates mean opacity tables.
      The main features are that the code is public and runs
      based on the user's choice of CE abundances, opacity
      sources, and sampling grid. In this section, we discuss some aspects that remain
      for future work.}

    Including dust opacities in our code is obviously the next target.
    We did not include them in the first version of our code because they depend on a dust model, which has not yet been established.
    In addition, the degree to which the dust abundances are involved in the CE of the
    gas mixture is not trivial.
    (If the dust abundances are independent from the CE of the gas mixture,
    one may simply add dust opacities taken from the literature \citep[e.g.,][]{Semenov:2003}
    to the gas opacities computed by our code, assuming some dust-to-gas mass ratio.)
    We need to solve these issues in order to include dust opacities.

    There are a few issues related to line broadening, although they may not affect the mean opacities.
    For example, we left implementing
    the linear Stark effect for hydrogen atoms \citep[e.g., Sect. 8.2.8 in][]{Hertel:2014} as future work.
    We are planning to use the tables provided in {\color{black} \citet{Stehle:1999,Stehle:2010}} to implement the linear Stark effect.
    Another issue is that pressure broadening parameters are not always provided together with a line list. If not provided, we can evaluate them for atoms using the (semi-)classical theory described in Appendix \ref{sec:classical_widths}. However, we are not aware of a proper way to evaluate them for molecules.

    Finally, the opacity sources implemented in the first version of the code are basic ones.
    We will continue to compile additional
    opacity sources to enhance our code, and we also expect to receive user contributions via GitHub.

    \begin{acknowledgements}
      {\color{black} We thank the anonymous referee for his/her valuable comments to improve our manuscript as well as our code.}
      This work was supported by JSPS KAKENHI (Grant Number JP18K03716). PHH gratefully acknowledges support from the DFG under grants HA 3457/20-1 and HA
3457/23-1. PHH gratefully acknowledges the support of NVIDIA Corporation with the donation of the Quadro P6000 GPU used in this research.
    \end{acknowledgements}

    \bibliographystyle{aa}

redpajama_set_name: RedPajamaArXiv


The art of keeping organized at work while making sure that either you or your employees are being functional cogs of the big machine that is your organization is one incredible balancing act.
In today�s digital world, do we really need to make lists to keep our time organized, efficient, and productive? I know I do! Anyone who knows me understands that I have a few passions: travel, cooking, my dog, and lists.
Hi Ben, Thanks for this great article, I think you have given there some quite useful tips. Although, I have a question. For me, there has been several times when one of my coworkers asked for an info that was included in a very old email (e.g. more than a year ago).


Founders and owners of High Hog Farm, Keisha and Warren Cameron and their sons, Zach (far left) and Abraham (far right).
Winter is waning at High Hog Farms, which sits on five acres about 40 miles northeast of Atlanta. The farm's 21 raised beds have been prepped and await the growing season. Hens are laying eggs, chicks are hatching and a new angora bunny named Langston has joined the farm as its future buck. Along with the resident sheep, his offspring will be sheared for wool. Soon enough, all that fluff will be on sale at a local farmers' market alongside High Hog's herbs, fruits, vegetables, poultry and pork. This is how Keisha Cameron nourishes her family and neighbors.
With the help of her husband, Warren and teenage sons, Cameron has turned a large plot in the small town of Grayson into a flourishing farm. She raises her livestock without growth hormones, cultivates her crops without pesticides or chemical fertilizers and sells the produce locally, right off the farm or at farmers' markets. Throughout the year, Cameron throws open High Hog's gates to volunteers and offers cooking classes like a"Cultured Kitchen Workshop." This is Cameron's way of cultivating community among black farmers in the region.
African American farmers have been helping produce the country's food for centuries, but their role and time-tested knowledge base have largely gone unsupported and unappreciated. A 2012 USDA Census on Agriculture found that out of the approximately two million farms in the United States, only 33,000 were black owned — fewer than 2 percent. Part of the reason, said Tamara Jones, executive director of the Southeastern African American Farmers' Organic Network (SAFFON), a nonprofit that supports black farming, culture and history, is that the U.S. agriculture system favors vast, industrialized farmsteads that grow commodity crops over small-scale farmers, especially those who are black.
Indeed, discrimination has played no small role. The U.S. Department of Agriculture (USDA) provides financial and technical support to America's farmers, but it has a long history of prejudicial treatment against African American ones, something the agency's own Commission on Small Farms acknowledges. Such systemic racism made headlines in 1999 when a federal judge in the Pigford v. Glickman case — reportedly the largest civil rights settlement in history — awarded almost $1 billion in restitution to black farmers and their families who were unfairly denied USDA farm loans and assistance between 1981 and 1996.
The fallout of such inequity has been a colossal loss of land over time for black farmsteads. In our current agricultural system, to kick off the growing season, farmers need cash — typically loans spent on seeds, fertilizer and pesticides that are paid back after the harvest. But when yields are poor and the farmer can't get a loan, a cycle of debt ensues that can eventually lead to the loss of the farm. According to the Federation of Southern Cooperatives, black farmers in the U.S. owned about 15 million acres of land in 1920. By 1997 the acreage had dropped 87 percent to around 2 million.
But a movement to preserve the cultural heritage and growing practices of black farmers and to support more diverse agriculture has been sprouting in the Southeast. There's always been a group of black farmers who have worked outside the dominant, chemical-heavy food system, said Jones, often because they couldn't afford all the extra inputs. Many have been farming the same parcel "organically" for generations, even before that term entered the vernacular.


If you've ever thought, "Yeah, I'd be positive too if I was living their life, but I'm not. My life is a mess and I'm the one who messed it up!" Well, good news, ME TOO!
So, as someone who is considered a generally positive person, I want to share with you some truths about us positive happy people that you might not know.
5 Things you didn't know about positive people.
Yep, I've got a lot to work on in my life still. This is something I openly share on this show all the time. In fact, I'm working to set myself apart from most people who are teaching in the Personal Development space. I want to be very open about the fact that I don't have it all perfected.
Yes, I've studied all of this stuff a LOT more than most people, but honestly, that's because I have had a lot to figure out about myself.
I guess one difference with me and obviously with you (because you listen to this show) is that we want to get better. If I was just as flawed but didn't care about getting better, I wouldn't have learned all I have over the years.
As I say this, I do realize I'm not the same as the masses. I work at getting better, I put what I learn into practice, but that just means I'm going out swinging the bat instead of sitting in the dug out. It doesn't mean I'm hitting home runs every time.
I remember one of the things I learned years ago when I used to be involved in a multi-level marketing business… the people in the big giant houses with the fancy cars are broke too. They end up with the same amount of money as you do at the end of each month. Most of them.
I used to be intimated by talking to those people until I realized that they needed more money just as much as I did. That's when I realized I was good enough to talk to them about what I was doing.
Now, I'm not in that type of business any more, but it was a great lesson to learn.
I'm good enough to share with you what I know and you want to know. That doesn't mean I know more about everything than you do. You probably know more about electrical systems than me. Or you may know more about how to grow your own vegetables than me. But when it comes to what I'm focused on… I'm good enough.
Tony Robbins went through a divorce. Yep, Tony Robbins, the guy who taught people about personal power, went through a divorce. His life isn't perfect.
I've spent years in Christian radio and I've met and hung out with all the major artists. I won't name names, but I will tell you, that guy up on stage singing about how great God is in their life… they're on anti-depressants because their life is falling apart.
If I turned on my camera on my laptop right now and left it on for 24 hours, you'd probably be a little frightened… not just tomorrow morning when I wake up and look horrible, but you'd see my wife come in and tell me what one of the kids did that day. Or you'd see me composing myself as I try to figure out how I'm going to get everything done that needs to be done today.
Maybe you'd hear us talking about tragedies in our past. Dealing with the after effects of sexual abuse, and betrayal, seeing family members arrested and visiting them in jail. Having other family members say hurtful things about me because they don't know the whole story. It happens regularly.
But you know what… it happens to everyone. You may not have had to deal with arrests, you may not have had to deal with sexual abuse, but you've had to deal with something.
Just like Tony Robbins who had to deal with divorce and the Christian superstar who has dealt with suicidal thoughts. We're all dealing with stuff.
See, when I know you're flawed and I'm open about my flaws, I suddenly become a LOT less judgmental. That's what helps us be positive.
When I try to hide my flaws and even go so far as to shine a spotlight on your flaws so people won't notice mine, I tend to always be looking for the negative in others. I have to look for it, or I won't know where to shine that spotlight when I need it taken off of me.
The most judgement people I've met in life are typically the ones who are most frightened you'll find out what's wrong with them.
When we share our flaws, we also aren't afraid to admit we need your help, which is number five.
This comes when we have the first four things down correctly. When I'm open about my flaws, I know you have your flaws, and I also know that because I'm good enough to help you, that means you're good enough to help me too.
See, this is where we become humble and stop placing ourselves on a pedestal. I feel the personal development world is filled with people who are saying "follow me and I'll help you be as awesome as I am." That sounds great initially and they probably build their audience faster than me, but I know that's going to be short-lived.
I need your help to make my life the best I can make it.
YES, I truly believe my life today is pretty darn good, but flawless? No way. Better than it was in the past? Well, I certainly handle it a lot better than I did in the past.
Peace in our lives doesn't come because we have peace around us, it comes because we have peace within us.
We need to realize exactly what I say all the time, we change the world AROUND us by first changing the world WITHIN us. This doesn't mean we suddenly have butterflies flittering around our head and birds singing over our shoulder, but it means we have a healthy approach towards all that life sends our way.
When that happens, the world tends to throw a lot less crap our way. I believe the energy we put out is the energy we cause the world around us to vibrate with. If you hit a tuning fork on a table, get it humming and then hold it next to one you haven't hit on the table, it will eventually pick up the vibration and match it. If you're putting out negative vibrations, the world around you will match it.
Be ok with what's happened in your life and all the scars and flaws on and around you.
Commit to being open about your life and all what you've been through.
Yes, if you have things you're doing which aren't healthy, stop. But, your past doesn't determine your worth today.
Be happy… be positive. Life is great and when we start thinking that way, it's only going to get better.


text:
Este artículo es sobre la variedad estándar del alemán en Suiza. Para los dialectos alemánicos en Suiza, véase el artículo alemán suizo.

El alemán estándar suizo (en alemán Schweizerhochdeutsch) hace referencia a la variedad escrita (Schriftdeutsch) o culta (Hochdeutsch) del alemán, una de las cuatro lenguas oficiales de Suiza, junto al francés, el italiano y el romanche. Es la variedad del alemán estándar que se emplea en el registro escrito en la zona germanohablante de Suiza. En su forma oral no suele emplearse mucho.

No se debe confundir el alemán estándar suizo con el alemán suizo, un término que se emplea para referirse al conjunto de dialectos alemánicos que se usan diariamente para comunicarse en la Suiza germanófona.

El alemán es un idioma pluricéntrico. En contraste con otras variedades locales del alemán, el alemán estándar suizo tiene características distintivas en todos los dominios lingüísticos: no solo en la fonología, sino también en el vocabulario, sintaxis, morfología y ortografía. Estas características del alemán estándar suizo se llaman helvetismos.

La institución encargada del cuidado y la normalización del alemán estándar suizo es la Schweizerischer Verein für die deutsche Sprache (SVDS, "Asociación suiza para la lengua alemana").

Alemán estándar suizo escrito

El alemán estándar suizo es la lengua escrita oficial de la Suiza germanófona. Se utiliza en los libros (aunque también existe literatura específica en dialecto), todas las publicaciones oficiales (incluyendo todas las leyes y reglamentos), los periódicos, los carteles, la mayoría de la publicidad y en otros materiales impresos. El alemán estándar suizo es similar en muchos aspectos al alemán estándar de Alemania y Austria, aunque presenta algunas diferencias en la ortografía, en particular la sustitución de la ligadura alemana ß por ss. Por ejemplo:

 Strasse = Straße (Alemania) = calle

También existen notables diferencias en el vocabulario, en algunos casos porque el alemán de Suiza ha adoptado préstamos de otros idiomas (especialmente del francés) que no se usan en el alemán de Alemania. Por ejemplo:

 Billett (del francés) = Fahrkarte (Alemania) = billete (del autobús/tranvía/tren, etc.)
 Führerausweis (formal) o Billett (coloquial) = Führerschein (Alemania) = licencia de conducir
 Velo (del francés) = Fahrrad (Alemania) = bicicleta
 Natel o Handy = Handy/Mobiltelefon (Alemania) = teléfono móvil
 parkieren = parken (Alemania) = aparcar
 Poulet (del francés) = Hähnchen (Alemania) = pollo

Además, el alemán estándar de Suiza utiliza fórmulas de cortesía para las cartas diferentes de las del alemán estándar.

Los suizos usan la palabra Spital para "hospital". Esta palabra se encuentra en los diccionarios de alemán estándar, si bien en el norte de Alemania se prefiere Krankenhaus, siendo Spital la forma que se emplea en zonas del sur de Alemania, Austria y Liechtenstein.

Algunos sustantivos presentan diferencias de género:

 Suiza: das Tram (neutro), Alemania: die Tram (femenino), español: tranvía (sólo se usa en zonas del sur de Baviera y Franconia; en el resto de Alemania se emplea Straßenbahn)
 Suiza: das E-Mail (neutro), Alemania: die E-Mail (femenino), español: correo electrónico

Algunas expresiones son calcos del francés y por lo tanto difieren de las que se usan en Alemania, tales como:

Suiza: ich habe kalt (literalmente "yo tengo frío", del francés j'ai froid), Alemania: mir ist [es] kalt (literalmente "[eso] es frío a mí")
Suiza: das geht dir gut (del francés ça te va bien), Alemania: das passt dir gut ("eso te queda bien")

A diferencia de los teclados alemanes, los teclados suizos no tienen tecla para la , ni tampoco teclas específicas para las mayúsculas con umlaut ,  y  (aunque es posible escribirlas con  o mediante el uso de la tecla ). Es habitual que los nombres de los municipios, ciudades, estaciones y calles no se escriban con una mayúscula inicial con umlaut, sino con Ae, Oe y Ue, tales como el barrio zuriqués de Oerlikon, la aldea de Aetzikofen, o el municipio bernés de Uebeschi. Sin embargo, los nombres de los campos, como Äbenegg, Ötikon (en Stäfa) o Überthal, y cualquier otra palabra, como Ärzte ("médicos"), por lo general suelen escribirse con mayúscula inicial con umlaut.

Alemán estándar suizo oral
El alemán estándar suizo se habla principalmente en las relaciones formales con el público, en las clases de la escuela, en presencia de hablantes de alemán no suizos, en los cursos universitarios, en los informativos de la televisión pública, en los parlamentos de algunos cantones germanófonos y en los debates de la Asamblea Federal. También se emiten en alemán estándar suizo los anuncios de megafonía de las estaciones de tren.

En las situaciones cotidianas, sólo se habla el alemán estándar suizo a las personas que no entienden el dialecto. La inteligibilidad mutua entre los diferentes dialectos de Suiza es muy amplia, por lo que no hay necesidad de recurrir a la lengua normativa para entenderse. En Suiza, los dialectos gozan de mayor prestigio que en el resto de territorios de habla alemana, así que el uso del dialecto no es percibido nunca como un signo de baja formación o inferioridad social. De hecho, la comunicación oral coloquial entre suizos germanófonos se hace casi sin excepción en el dialecto local, independientemente del nivel educativo y la clase social.

Diglosia
La relación entre el alemán estándar suizo y los dialectos del alemán suizo ha sido descrita como de diglosia. Esta afirmación ha sido bastante discutida, ya que el caso típico de diglosia supone que la variedad estándar goza de gran prestigio, mientras que el prestigio de las variedades informales es bajo. Sin embargo, en las zonas germanohablantes de Suiza los dialectos del alemán suizo no sólo no tienen un bajo prestigio, sino que los usan todas las clases socio-económicas de la sociedad.

Puesto que el alemán estándar suizo es la lengua habitual de escritura y los dialectos del alemán suizo constituyen la lengua oral habitual, su interrelación se puede describir como diglosia medial.

Ejemplos
Debe tenerse en cuenta que estos helvetismos no son términos dialectales que deberían considerarse como errores estilísticos en la lengua estándar, sino que se trata de expresiones correctas en la lengua estándar.

El alemán estándar suizo ha incorporado muchas palabras y expresiones del francés, un fenómeno que también ha experimentado la lengua alemana en su conjunto durante siglos y especialmente en los siglos XVII, XVIII y XIX, debido a la influencia cultural que ejercía Francia en Europa y el mundo (el francés era la lengua de las élites intelectuales y la nobleza). En general, los préstamos han conservado la ortografía francesa, aunque la pronunciación y la acentuación se han adaptado en muchos casos al alemán suizo (p.ej. Fondue: con acento en la primera sílaba; Billett: se pronuncia la "t").

Referencias

Dialectos del alemán
Lenguas de Suiza

redpajama_set_name: RedPajamaWikipedia